(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-05-20
(54)【発明の名称】エンコーダ、デコーダ、および対応する方法
(51)【国際特許分類】
H04N 19/70 20140101AFI20220513BHJP
【FI】
H04N19/70
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2021559888
(86)(22)【出願日】2020-04-09
(85)【翻訳文提出日】2021-12-07
(86)【国際出願番号】 US2020027497
(87)【国際公開番号】W WO2020210511
(87)【国際公開日】2020-10-15
(32)【優先日】2019-04-10
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】504161984
【氏名又は名称】ホアウェイ・テクノロジーズ・カンパニー・リミテッド
(74)【代理人】
【識別番号】100110364
【氏名又は名称】実広 信哉
(74)【代理人】
【識別番号】100133569
【氏名又は名称】野村 進
(72)【発明者】
【氏名】イェ-クイ・ワン
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159MA01
5C159MA04
5C159MA05
5C159MA21
5C159MC11
5C159ME01
5C159PP04
5C159RC11
5C159UA02
5C159UA05
(57)【要約】
ビデオコーディングメカニズムが、開示される。メカニズムは、スライスを含むビットストリームを受信することを含む。スライス内のエントリポイントの数(NumEntryPoints)が、導出される。0からNumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットが、決定される。スライスは、コーディングされたスライスデータのサブセットについてのオフセットに基づいて復号される。スライスは、復号されたビデオシーケンスの一部として表示するために転送される。
【特許請求の範囲】
【請求項1】
デコーダにおいて実装される方法であって、
前記デコーダの受信器によって、スライスを含むビットストリームを受信するステップと、
前記デコーダのプロセッサによって、前記スライス内のエントリポイントの数(NumEntryPoints)を導出するステップと、
前記プロセッサによって、0から前記NumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するステップと、
前記プロセッサによって、前記コーディングされたスライスデータの前記サブセットについての前記オフセットに基づいて前記スライスを復号するステップとを含む、方法。
【請求項2】
前記NumEntryPointsは、前記スライスが波面並列処理(WPP)によってコーディングされるときに導出される請求項1に記載の方法。
【請求項3】
前記ビットストリームは、スライスヘッダを含み、前記スライスヘッダは、前記スライス内のエントリポイントのオフセットの数に対応する値を含まない請求項1または2に記載の方法。
【請求項4】
前記NumEntryPointsは、前記スライス内の行のサイズに基づいて導出される請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記NumEntryPointsは、前記スライス内の列のサイズに基づいて導出される請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記NumEntryPointsは、前記スライス内のコーディングツリーユニット(CTU)の数に基づいて導出される請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記NumEntryPointsは、前記スライス内のアドレスに基づいて導出される請求項1から6のいずれか一項に記載の方法。
【請求項8】
前記NumEntryPointsは、前記スライスのサイズに基づいて導出される請求項1から7のいずれか一項に記載の方法。
【請求項9】
エンコーダにおいて実装される方法であって、
前記エンコーダのプロセッサによって、コーディングされた参照ピクチャの参照スライスを取得するステップと、
前記プロセッサによって、前記参照スライス内のエントリポイントの数(NumEntryPoints)を導出するステップと、
前記プロセッサによって、前記NumEntryPointsに基づいて前記参照スライス内のコーディングされたデータのサブセットについてのオフセットを決定するステップと、
前記プロセッサによって、前記参照スライス内の前記コーディングされたデータの前記サブセットについての前記オフセットに基づいて前記コーディングされた参照ピクチャの前記参照スライスを復号するステップと、
前記プロセッサによって、前記参照スライスに基づいて現在のスライスをビットストリームに符号化するステップと、
前記プロセッサに結合されたメモリによって、デコーダに伝達するための前記ビットストリームを記憶するステップとを含む、方法。
【請求項10】
前記NumEntryPointsは、前記参照スライスが波面並列処理(WPP)によってコーディングされるときに導出される請求項9に記載の方法。
【請求項11】
前記ビットストリームは、スライスヘッダを含み、前記スライスヘッダは、前記参照スライス内のエントリポイントのオフセットの数に対応する値を含まない請求項9または10に記載の方法。
【請求項12】
前記NumEntryPointsは、前記参照スライス内の行のサイズに基づいて導出される請求項9から11のいずれか一項に記載の方法。
【請求項13】
前記NumEntryPointsは、前記参照スライス内の列のサイズに基づいて導出される請求項9から12のいずれか一項に記載の方法。
【請求項14】
前記NumEntryPointsは、前記参照スライス内のコーディングツリーユニット(CTU)の数に基づいて導出される請求項9から13のいずれか一項に記載の方法。
【請求項15】
前記NumEntryPointsは、前記参照スライス内のアドレスに基づいて導出される請求項9から14のいずれか一項に記載の方法。
【請求項16】
前記NumEntryPointsは、前記参照スライスのサイズに基づいて導出される請求項9から15のいずれか一項に記載の方法。
【請求項17】
プロセッサと、前記プロセッサに結合された受信器と、前記プロセッサに結合されたメモリと、前記プロセッサに結合された送信器とを含み、前記プロセッサ、前記受信器、前記メモリ、および前記送信器は、請求項1から16のいずれか一項に記載の方法を行うように構成されるビデオコーディングデバイス。
【請求項18】
ビデオコーディングデバイスによる使用のためのコンピュータプログラム製品を含む非一時的コンピュータ可読媒体であって、前記コンピュータプログラム製品は、プロセッサによって実行されると前記ビデオコーディングデバイスに請求項1から16のいずれか一項に記載の方法を行わせるように前記非一時的コンピュータ可読媒体に記憶されたコンピュータが実行可能な命令を含む、非一時的コンピュータ可読媒体。
【請求項19】
スライスを含むビットストリームを受信するための受信手段と、
前記スライス内のエントリポイントの数(NumEntryPoints)を導出するための導出手段と、
0から前記NumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するための決定手段と、
前記コーディングされたスライスデータの前記サブセットについての前記オフセットに基づいて前記スライスを復号するための復号手段とを含むデコーダ。
【請求項20】
請求項1から8のいずれか一項に記載の方法を行うようにさらに構成される請求項19に記載のデコーダ。
【請求項21】
コーディングされた参照ピクチャの参照スライスを取得するための取得手段と、
前記参照スライス内のエントリポイントの数(NumEntryPoints)を導出するための導出手段と、
前記NumEntryPointsに基づいて前記参照スライス内のコーディングされたデータのサブセットについてのオフセットを決定するための決定手段と、
コーディング手段であって、
前記参照スライス内の前記コーディングされたデータの前記サブセットについての前記オフセットに基づいて前記コーディングされた参照ピクチャの前記参照スライスを復号し、
前記参照スライスに基づいて現在のスライスをビットストリームに符号化するための、コーディング手段と、
デコーダに伝達するための前記ビットストリームを記憶するための記憶手段とを含むエンコーダ。
【請求項22】
請求項9から16のいずれか一項に記載の方法を行うようにさらに構成される請求項21に記載のエンコーダ。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
本特許出願は、Ye-Kui Wangによって2019年4月10日に出願された、「Video Coding Improvements」と題された米国特許仮出願第62/832,128号の利益を主張するものであり、この仮出願は、参照により本明細書に組み込まれる。
【0002】
本開示は、概して、ビデオコーディングに関し、特に、ビデオコーディングにおいてピクチャのスライス内のコーディングされたデータについてのエントリポイントを決定することに関する。
【背景技術】
【0003】
比較的短いビデオでさえも描くために必要とされるビデオデータの量はかなり多くなり得、それが、データが限られた帯域幅の容量を有する通信ネットワークを介してストリーミングされるかまたはそれ以外の方法で伝達されるべきであるときに困難をもたらし得る。したがって、ビデオデータは、概して、現代の電気通信ネットワークを介して伝達される前に圧縮される。メモリリソースが限られている可能性があるので、ビデオがストレージデバイスに記憶されるとき、ビデオのサイズも問題となり得る。多くの場合、ビデオ圧縮デバイスは、送信元においてソフトウェアおよび/またはハードウェアを使用して送信または記憶の前にビデオデータをコーディングし、それによって、デジタルビデオ画像を表現するために必要とされるデータの量を削減する。圧縮されたデータは、ついで、ビデオデータを復号するビデオ解凍デバイスによって送信先において受信される。限られたネットワークリソースおよびより高いビデオ品質のますます増加する需要により、画像品質をほとんどまたはまったく犠牲にせずに圧縮比を高める改善された圧縮および解凍技術が望ましい。
【発明の概要】
【課題を解決するための手段】
【0004】
実施形態において、本開示は、デコーダにおいて実装される方法であって、デコーダの受信器によって、スライスを含むビットストリームを受信するステップと、デコーダのプロセッサによって、スライス内のエントリポイントの数(NumEntryPoints)を導出するステップと、プロセッサによって、0からNumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するステップと、プロセッサによって、コーディングされたスライスデータのサブセットについてのオフセットに基づいてスライスを復号するステップと、プロセッサによって、復号されたビデオシーケンスの一部として表示するためのスライスを転送するステップとを含む方法を含む。いくつかのビデオコーディングシステムにおいて、エンコーダは、各スライスについてnum_entry_point_offsetsの値をシグナリングする。そして、デコーダは、ビットストリームに基づいてNumEntryPointsの値を設定する。この値は、スライス内のコーディングされたデータの各グループについてのオフセットを決定するために使用される。ついで、これらのグループは、オフセットを使用して復号され得る。この例は、ビットストリーム内で値をシグナリングすることなくNumEntryPointsの値を決定するためのメカニズムを使用する。そのとき、NumEntryPointsは、サブセットと、したがって、スライスとを再構築する前にコーディングツリーユニット(CTU: coding tree unit)の行などのスライスのサブセットについてのオフセットを取得するために使用され得る。たとえば、メカニズムは、スライスが波面並列処理(WPP: wavefront parallel processing)によってコーディングされるときにスライスについてのNumEntryPointsを導出するために使用され得る。NumEntryPointsは、WPP/CTUの行のサイズ、WPP/CTUの列のサイズに基づいて、スライス内のCTUの数に基づいて、ならびに/またはCTUおよび/もしくはスライスアドレスに基づいて導出され得る。この手法は、ビデオストリーム内の各スライスヘッダについてのおよびしたがって各スライスについてのシグナリングされる値を削除する。ピクチャは、複数のスライスを含み得る。さらに、ビデオシーケンスは、何千ものピクチャを含み得る。したがって、ビットストリームからnum_entry_point_offsetsを削除することは、ビデオストリームのサイズを大幅に削減し、コーディングの効率を高め、エンコーダとデコーダとの両方におけるメモリおよびネットワークリソースの使用を削減する。
【0005】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが、スライスが波面並列処理(WPP)によってコーディングされるときに導出されることを提供する。
【0006】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、ビットストリームがスライスヘッダを含み、スライスヘッダがスライス内のエントリポイントのオフセットの数に対応する値を含まないことを提供する。
【0007】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライス内の行のサイズに基づいて導出されることを提供する。
【0008】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライス内の列のサイズに基づいて導出されることを提供する。
【0009】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライス内のコーディングツリーユニット(CTU)の数に基づいて導出されることを提供する。
【0010】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライス内のアドレスに基づいて導出されることを提供する。
【0011】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライスのサイズに基づいて導出されることを提供する。
【0012】
実施形態において、本開示は、エンコーダにおいて実装される方法であって、エンコーダのプロセッサによって、コーディングされた参照ピクチャの参照スライスを取得するステップと、プロセッサによって、参照スライス内のNumEntryPointsを導出するステップと、プロセッサによって、NumEntryPointsに基づいて参照スライス内のコーディングされたデータのサブセットについてのオフセットを決定するステップと、プロセッサによって、参照スライス内のコーディングされたデータのサブセットについてのオフセットに基づいてコーディングされた参照ピクチャの参照スライスを復号するステップと、プロセッサによって、参照スライスに基づいて現在のスライスをビットストリームに符号化するステップと、デコーダに伝達するためのビットストリームをプロセッサに結合されたメモリによって記憶するステップとを含む、方法を含む。いくつかのビデオコーディングシステムにおいて、エンコーダは、各スライスについてnum_entry_point_offsetsの値をシグナリングする。そして、デコーダは、ビットストリームに基づいてNumEntryPointsの値を設定する。この値は、スライス内のコーディングされたデータの各グループについてのオフセットを決定するために使用される。ついで、これらのグループは、オフセットを使用して復号され得る。この例は、ビットストリーム内で値をシグナリングすることなくNumEntryPointsの値を決定するためのメカニズムを使用する。そのとき、NumEntryPointsは、サブセットと、したがって、スライスとを再構築する前にコーディングツリーユニット(CTU)の行などのスライスのサブセットについてのオフセットを取得するために使用され得る。たとえば、メカニズムは、スライスが波面並列処理(WPP)によってコーディングされるときにスライスについてのNumEntryPointsを導出するために使用され得る。NumEntryPointsは、WPP/CTUの行のサイズ、WPP/CTUの列のサイズに基づいて、スライス内のCTUの数に基づいて、ならびに/またはCTUおよび/もしくはスライスアドレスに基づいて導出され得る。この手法は、ビデオストリーム内の各スライスヘッダについてのおよびしたがって各スライスについてのシグナリングされる値を削除する。ピクチャは、複数のスライスを含み得る。さらに、ビデオシーケンスは、何千ものピクチャを含み得る。したがって、ビットストリームからnum_entry_point_offsetsを削除することは、ビデオストリームのサイズを大幅に削減し、コーディングの効率を高め、エンコーダとデコーダとの両方におけるメモリおよびネットワークリソースの使用を削減する。
【0013】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが、参照スライスがWPPによってコーディングされるときに導出されることを提供する。
【0014】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、ビットストリームがスライスヘッダを含み、スライスヘッダが参照スライス内のエントリポイントのオフセットの数に対応する値を含まないことを提供する。
【0015】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライス内の行のサイズに基づいて導出されることを提供する。
【0016】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライス内の列のサイズに基づいて導出されることを提供する。
【0017】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライス内のCTUの数に基づいて導出されることを提供する。
【0018】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライス内のアドレスに基づいて導出されることを提供する。
【0019】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライスのサイズに基づいて導出されることを提供する。
【0020】
実施形態において、本開示は、プロセッサと、プロセッサに結合された受信器と、プロセッサに結合されたメモリと、プロセッサに結合された送信器とを含み、プロセッサ、受信器、メモリ、および送信器は、上記態様のいずれかの方法を行うように構成されるビデオコーディングデバイスを含む。
【0021】
実施形態において、本開示は、ビデオコーディングデバイスによる使用のためのコンピュータプログラム製品を含む非一時的コンピュータ可読媒体であって、コンピュータプログラム製品は、プロセッサによって実行されるときにビデオコーディングデバイスに上記態様のいずれかの方法を行わせる、非一時的コンピュータ可読媒体に記憶されたコンピュータが実行可能な命令を含む、非一時的コンピュータ可読媒体を含む。
【0022】
実施形態において、本開示は、スライスを含むビットストリームを受信するための受信手段と、スライス内のNumEntryPointsを導出するための導出手段と、0からNumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するための決定手段と、コーディングされたスライスデータのサブセットについてのオフセットに基づいてスライスを復号するための復号手段と、復号されたビデオシーケンスの一部として表示するためのスライスを転送するための転送手段とを含むデコーダを含む。
【0023】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、デコーダが上記態様のいずれかの方法を行うようにさらに構成されることを提供する。
【0024】
実施形態において、本開示は、コーディングされた参照ピクチャの参照スライスを取得するための取得手段と、参照スライス内のNumEntryPointsを導出するための導出手段と、NumEntryPointsに基づいて参照スライス内のコーディングされたデータのサブセットについてのオフセットを決定するための決定手段と、コーディング手段であって、参照スライス内のコーディングされたデータのサブセットについてのオフセットに基づいてコーディングされた参照ピクチャの参照スライスを復号し、参照スライスに基づいて現在のスライスをビットストリームに符号化するための、コーディング手段と、デコーダに伝達するためのビットストリームを記憶するための記憶手段とを含むエンコーダを含む。
【0025】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、エンコーダが上記態様のいずれかの方法を行うようにさらに構成されることを提供する。
【0026】
明瞭にする目的で、上述の実施形態の任意の1つが、本開示の範囲内の新しい実施形態を生成するために他の上述の実施形態のうちの任意の1つまたは複数と組み合わされてもよい。
【0027】
これらのおよび他の特徴は、以下の詳細な説明を添付の図面および請求項と併せて理解することによってより明瞭に理解されるであろう。
【0028】
本開示のより完全な理解のために、同様の参照番号が同様の部分を表す添付の図面および詳細な説明に関連して解釈される以下の簡単な説明がここで参照される。
【図面の簡単な説明】
【0029】
【
図1】ビデオ信号をコーディングする例示的な方法の流れ図である。
【
図2】ビデオコーディングのための例示的なコーディングおよびデコーディング(コーデック)システムの概略図である。
【
図3】例示的なビデオエンコーダを示す概略図である。
【
図4】例示的なビデオデコーダを示す概略図である。
【
図5】波面並列処理(WPP)の例示的なメカニズムを示す概略図である。
【
図6】例示的なビットストリームを示す概略図である。
【
図7】例示的なビデオコーディングデバイスの概略図である。
【
図8】スライスについてのエントリポイントの数(NumEntryPoints)をシグナリングすることなくビデオシーケンスをビットストリームに符号化する例示的な方法の流れ図である。
【
図9】NumEntryPointsがビットストリームに含まれないときにビデオシーケンスを復号するためにNumEntryPointsを導出する例示的な方法の流れ図である。
【
図10】NumEntryPointsをシグナリングすることなくビットストリームにビデオシーケンスをコーディングするための例示的なシステムの概略図である。
【発明を実施するための形態】
【0030】
まず、以下においては1つまたは複数の実施形態の例示的な実装が与えられるが、開示されるシステムおよび/または方法は、現在知られているのかまたは存在しているのかにかかわらず任意の数の技術を用いて実装されうることを理解されたい。本開示は、本明細書において例示され、説明される例示的な設計および実装を含む、以下で示される例示的な実装、図面、および技術にまったく限定されるべきでなく、添付の請求項の均等物の全範囲と併せたそれらの請求項の範囲内で修正され得る。
【0031】
以下の用語は、本明細書において反する文脈で使用されない限り、以下の通り定義される。特に、以下の定義は、本開示にさらなる明瞭性を与えることが意図される。しかし、用語は、異なる文脈において異なるように説明される可能性がある。したがって、以下の定義は、補足と考えられるべきであり、本明細書においてこのような用語について与えられる説明のいかなる他の定義も限定するものと考えられるべきでない。
【0032】
ビットストリームは、エンコーダとデコーダとの間の送信のために圧縮されるビデオデータを含むシーケンスビットである。エンコーダは、符号化プロセスを用いてビデオデータをビットストリームへと圧縮するように構成されるデバイスである。デコーダは、復号プロセスを用いて表示のためにビットストリームからビデオデータを再構築するように構成されるデバイスである。ピクチャは、ビデオシーケンス内の対応する瞬間におけるユーザへの完全なまたは部分的な表示を目的とする完全な画像である。参照ピクチャは、インター予測によって参照により他のピクチャをコーディングするときに使用され得る参照サンプルを含むピクチャである。コーディングされたピクチャは、インター予測またはイントラ予測によってコーディングされ、ビットストリーム内の単一のアクセスユニット(access unit)に含まれ、ピクチャのコーディングツリーユニット(CTU)の完全なセットを含むピクチャの表現である。スライスは、整数個の完全なタイルまたはピクチャのタイル内の整数個の連続した完全なCTUの行を含むピクチャの区分であり、スライスおよびすべての細分化されたものは、単一のネットワーク抽象化レイヤ(NAL: network abstraction layer)ユニットに排他的に含まれる。参照スライスは、参照サンプルを含む参照ピクチャのスライスであるか、またはインター予測によって参照により他のスライスをコーディングするときに使用される。スライスヘッダは、スライスに表されるすべてのタイルまたはタイル内のCTUの行に関連するデータ要素を含むコーディングされたスライスの部分である。エントリポイントは、コーディングされたスライスの対応するサブセットについてのビデオデータの最初のビットを含むビットストリーム内のビット位置である。オフセットは、知られているビット位置とエントリポイントとの間のビット数で表された距離である。サブセットは、セットの細分化されたものである。たとえば、スライスがセットであるとき、タイル、CTU/コーディングツリーブロック(CTB: coding tree block)の行、またはCTU/CTBは、セットのサブセットである。コーディングツリーユニット(CTU)は、コーディングツリー(coding tree)によって区分化され得る予め定義され
たサイズのサンプルのグループである。CTUの行は、左のスライスの境界と右のスライスの境界との間に水平に延びるCTUのグループである。CTUの列は、上のスライスの境界と下のスライスの境界との間に垂直に延びるCTUのグループである。CTBは、ルマ(luma)サンプルのみ、赤色差(red difference chroma)サンプルのみ、または青色差(blue difference chroma)サンプルのみを含むCTUの一部分である。CTBの行/CTBの列は、ルマサンプルのみ、赤色差サンプルのみ、または青色差サンプルのみを含むCTUの行/列である。CTUおよびCTBは、多くの文脈で交換可能なように使用されうることに留意されたい。波面並列処理(WPP)は、各行が異なるスレッドによって並列に復号されることを可能にするためにスライスのCTU/CTBの行を遅延させてコーディングするメカニズムである。スライスアドレスは、スライスまたはその下位部分の特定可能な位置である。
【0033】
以下の頭字語、コーディングされたビデオシーケンス(CVS: Coded Video Sequence)、復号ピクチャバッファ(DPB)、瞬時復号リフレッシュ(IDR: Instantaneous Decoding Refresh)、イントラランダムアクセスポイント(IRAP)、合同ビデオ専門家チーム(JVET: Joint Video Experts Team)、最下位ビット(LSB)、最上位ビット(MSB)、ネットワーク抽象化レイヤ(NAL)、ピクチャ順序カウント(POC: Picture Order Count)、生バイトシーケンスペイロード(RBSP: Raw Byte Sequence Payload)、リアルタイムトランスポートプロトコル(RTP)、シーケンスパラメータセット(SPS)、多目的ビデオコーディング(VVC Versatile Video Coding)、作業草案(WD)、および波面並列処理(WPP)が、本明細書において使用される。
【0034】
多くのビデオ圧縮技術が、データの最小限の損失でビデオファイルのサイズを削減するために使用され得る。たとえば、ビデオ圧縮技術は、ビデオシーケンスのデータの冗長性を減らすかまたは取り除くために空間(たとえば、イントラピクチャ)予測および/または時間(インターピクチャ)予測を行うことを含み得る。ブロックに基づくビデオコーディングのために、ビデオスライス(たとえば、ビデオピクチャまたはビデオピクチャの一部)が、ビデオブロックに区分化される可能性があり、ビデオブロックは、ツリーブロック、コーディングツリーブロック(CTB)、コーディングツリーユニット(CTU)、コーディングユニット(CU: coding unit)、および/またはコーディングノード(coding node)とも称されうる。ピクチャのイントラコーディングされる(I)スライス内のビデオブロックは、同じピクチャ内の近傍ブロック内の参照サンプルに関連する空間予測を使用してコーディングされる。ピクチャのインターコーディングされる片方向予測(P)または両方向予測(B)スライス内のビデオブロックは、同じピクチャ内の近傍ブロック内の参照サンプルに関連する空間予測または他の参照ピクチャ内の参照サンプルに関連する時間予測を使用することによってコーディングされ得る。ピクチャは、フレームおよび/または画像と称される可能性があり、参照ピクチャは、参照フレームおよび/または参照画像と称されうる。空間または時間予測は、画像ブロックを表す予測ブロックをもたらす。残差データは、元の画像ブロックと予測ブロックとの間のピクセルの差を表す。したがって、インターコーディングされるブロックは、予測ブロックを形成する参照サンプルのブロックを指す動きベクトルと、コーディングされるブロックと予測ブロックとの間の差を示す残差データとによってコーディングされる。イントラコーディングされるブロックは、イントラコーディングモードおよび残差データによってコーディングされる。さらなる圧縮のために、残差データが、ピクセル領域(pixel domain)から変換領域(transform domain)に変換され得る。これらは、残差変換係数をもたらし、残差変換係数は、量子化され得る。最初に、量子化された変換係数は、2次元配列に配列され得る。量子化された変換係数は、変換係数の
1次元ベクトルを生成するためにスキャンされ得る。エントロピーコーディングが、より一層の圧縮を実現するために適用され得る。このようなビデオ圧縮技術は、下でより詳細に検討される。
【0035】
符号化されたビデオが正確に復号され得ることを保証するために、ビデオは、対応するビデオコーディング規格に従って符号化され、復号される。ビデオコーディング規格は、国際電気通信連合(ITU)標準化セクター(ITU-T)H.261、国際標準化機構/国際電気標準会議(ISO/IEC)動画専門家グループ(MPEG)-1パート2、ITU-T H.262またはISO/IEC MPEG-2パート2、ITU-T H.263、ISO/IEC MPEG-4パート2、ITU-T H.264またはISO/IEC MPEG-4パート10としても知られる高度ビデオコーディング(AVC: Advanced Video Coding)、ITU-T H.265またはMPEG-Hパート2としても知られる高効率ビデオコーディング(HEVC: High Efficiency Video Coding)を含む。AVCは、スケーラブルビデオ符号化(SVC: Scalable Video Coding)、多視点ビデオコーディング(MVC: Multiview Video Coding)および多視点ビデオコーディングプラス深度(MVC+D: Multiview Video Coding plus Depth)、ならびに3次元(3D)AVC(3D-AVC)などの拡張を含む。HEVCは、スケーラブルHEVC(SHVC)、多視点HEVC(MV-HEVC)、および3D HEVC(3D-HEVC)などの拡張を含む。ITU-TおよびISO/IECの合同ビデオ専門家チーム(JVET)は、多目的ビデオコーディング(VVC)と称されるビデオコーディング規格の開発を開始した。VVCは、JVET-N1001-v1を含む作業草案(WD)に含まれる。
【0036】
ビデオコーディングシステムは、多くの異なるメカニズムを使用してビデオを符号化し得る。たとえば、ビデオコーディングシステムは、ピクチャをスライスに区分化し得る。いくつかの例において、スライスは、タイルに区分化される。例によっては、スライスおよび/またはスライスのタイルは、ついでCTUの行に区分化され得る。そして、CTUは、コーディングツリーによってコーディングブロックに細分化され、コーディングブロックは、予測メカニズムによってコーディングされる。コーディングされたコーディングブロックは、ついでビットストリームに含められる。WPPにおいて、CTUおよびその区分の行は、並列にコーディングされる。たとえば、WPPは、例によっては、第1のスレッドを使用して第1の行の1つまたは2つのCTUをコーディングし、そして、第2のスレッドを用いて第2の行のCTUのコーディングを開始してもよい。第2の行の1つ/2つのCTUがコーディングされると、第3のスレッドが、第3の行のCTUのコーディングを開始してもよく、以下同様である。いくつかの予測方式は、現在のブロックの上または左に位置するブロックを参照することによってコーディングする。次の行のコーディングの開始の間にCTU遅延を置くことによって、WPPは、現在のブロックがコーディングされる前に現在のブロックの上または左に位置するブロックがコーディングされることを保証することができる。これは、エンコーダが現在のブロックのコーディングを開始するときにこのようなデータが潜在的に利用不可能であるという問題を軽減する。
【0037】
したがって、多数のビットが、ビットストリームに含まれる。さらに、これらのビットの各々は、対応するスライスまたはその下位部分に関連付けられる。デコーダがビットストリームを解釈し、関連するデータを発見するのを支援するために、オフセットの配列がビットストリームに含められ得る。オフセットは、それぞれ、ビットストリーム内の対応するデータの位置を示す。コーディングされたスライスの対応するサブセットについてのビデオデータの最初のビットのオフセットは、エントリポイントとして知られる。WPPの場合、サブセットは、CTUの行である。したがって、WPPにおいては、スライス内のCTUの行数と同じ数のエントリポイントがスライス内に存在し得る。いくつかのビデオコーディングシステムにおいては、num_entry_point_offsetsが、スライスヘッダに含まれる。num_entry_point_offsetsは、スライスに含まれた、したがって、オフセットの配列から取得されるべきオフセットの数をデコーダに示すエントリポイントのオフセットの数をシグナリングするパラメータである。デコーダは、スライスヘッダからのnum_entry_point_offsetsを使用して関連するオフセットを取得し、対応するCTUの復号を開始することができる。この手法は効果的であるが、num_entry_point_offsetsが、複数のビットを含み、いずれのスライスヘッダにおいてもシグナリングされる。各ピクチャはいくつかのスライスを含むことがあり、ビデオシーケンスは何千ものピクチャを含むことがあるので、num_entry_point_offsetsは、何回もシグナリングされ、ビデオシーケンス内のデータの量に著しい集合的な影響を与えうる。
【0038】
本明細書において開示されるのは、デコーダにおいてエントリポイントの数(NumEntryPoints)の値を導出するためのメカニズムである。ついでNumEntryPointsは、サブセットと、したがって、スライスとを再構築する前にスライスのサブセット(たとえば、CTUの行)についてのオフセットを取得するために使用され得る。これは、num_entry_point_offsetsがビットストリームの各スライスヘッダから削除されることを可能にする。これらのメカニズムは、デコーダにおいて、および/またはエンコーダの仮想参照デコーダ(HRD: hypothetical reference decoder)において、使用され得る。ピクチャが複数のスライスを含むことがあり、ビデオが何千ものピクチャを含むことがあるので、ビットストリームからこの値を削除することは、ビデオストリームのサイズを大幅に削減し、コーディングの効率を高め、エンコーダとデコーダとの両方におけるメモリおよびネットワークリソースの使用を削減する。たとえば、メカニズムは、スライスがWPPによってコーディングされるときにスライスについてのNumEntryPointsを導出するために使用され得る。NumEntryPointsは、WPP/CTUの行のサイズ、WPP/CTUの列のサイズに基づいて、スライス内のCTUの数に基づいて、ならびに/またはCTUおよび/もしくはスライスアドレスに基づいて導出され得る。
【0039】
図1は、ビデオ信号をコーディングする例示的な動作方法100の流れ図である。具体的には、ビデオ信号は、エンコーダにおいて符号化される。符号化プロセスは、様々なメカニズムを使用してビデオファイルサイズを削減することによってビデオ信号を圧縮する。より小さなファイルサイズは、圧縮されたビデオファイルが、関連付けられる帯域幅のオーバーヘッドを削減しつつ、ユーザに送信されることを可能にする。そして、デコーダは、圧縮されたビデオファイルを復号して、エンドユーザに対して表示するために元のビデオ信号を再構築する。概して、復号プロセスは、デコーダがビデオ信号を矛盾なく再構築することを可能にするために、符号化プロセスを反映したものである。
【0040】
ステップ101において、ビデオ信号は、エンコーダに入力される。たとえば、ビデオ信号は、メモリに記憶された未圧縮のビデオファイルであり得る。他の例として、ビデオファイルは、ビデオカメラなどのビデオキャプチャデバイスによってキャプチャされ、ビデオのライブストリーミングをサポートするために符号化され得る。ビデオファイルは、オーディオコンポーネントとビデオコンポーネントとの両方を含み得る。ビデオコンポーネントは、順番に見られるときに動きの視覚的な印象を与える一連の画像フレームを含む。フレームは、本明細書においてルマ成分(またはルマサンプル)と称される光と、クロマ(chroma)成分(またはカラーサンプル)と称される色とによって表されるピクセルを含む。いくつかの例において、フレームは、3次元の視聴をサポートするための深度値も含み得る。
【0041】
ステップ103において、ビデオは、ブロックに区分化される。区分化は、各フレームのピクセルを圧縮のために正方形および/または長方形のブロックに細分化することを含む。たとえば、高効率ビデオコーディング(HEVC)(H.265およびMPEG-Hパート2としても知られる)において、フレームは、まず、予め定義されたサイズ(たとえば、64ピクセル×64ピクセル)のブロックであるコーディングツリーユニット(CTU)に分割され得る。CTUは、ルマサンプルとクロマサンプルとの両方を含む。CTUをブロックに分割し、ついで、さらなる符号化をサポートする構成が実現されるまでブロックを繰り返し細分化するためにコーディングツリーが使用され得る。たとえば、フレームのルマ成分は、個々のブロックが比較的均一な照明値を含むまで細分化される可能性がある。たとえば、フレームのクロマ成分は、個々のブロックが比較的均一な色の値を含むまで細分化される可能性がある。したがって、区分化のメカニズムは、ビデオフレームの内容に応じて変わる。
【0042】
ステップ105においては、ステップ103において区分化された画像ブロックを圧縮するために様々な圧縮メカニズムが使用される。たとえば、インター予測および/またはイントラ予測が使用され得る。インター予測は、普通のシーン内の物体が連続したフレームに現れる傾向があるという事実を利用するように設計される。したがって、参照フレームにおいて物体を描くブロックは、隣接するフレームにおいて繰り返し示される必要がない。具体的には、テーブルなどの物体は、複数のフレームにわたって一定の位置にとどまりうる。したがって、テーブルは、一回示され、隣接するフレームは、参照フレームを振り返って参照することができる。パターンマッチングメカニズムは、複数のフレームにわたって物体をマッチングするために使用され得る。さらに、移動する物体は、たとえば、物体の移動またはカメラの移動が原因で複数のフレームにまたがって表される可能性がある。特定の例として、ビデオは、複数のフレームにわたって画面を横切って移動する自動車を示す可能性がある。動きベクトルは、このような移動を示すために使用され得る。動きベクトルは、フレーム内の物体の座標から参照フレーム内の物体の座標までのオフセットを与える2次元ベクトルである。したがって、インター予測は、現在のフレーム内の画像ブロックを、参照フレーム内の対応するブロックからのオフセットを示す動きベクトルのセットとして符号化し得る。
【0043】
イントラ予測は、共通のフレーム内のブロックを符号化する。イントラ予測は、ルマ成分およびクロマ成分がフレーム内でクラスターになる傾向があるという事実を利用する。たとえば、木の一部分の緑の区域は、同様の緑の区域の近傍に位置する傾向がある。イントラ予測は、複数の方向性予測モード(たとえば、HEVCにおいては33個)、planarモード、および直流(DC)モードを使用する。方向性モードは、現在のブロックが対応する方向の近傍ブロックのサンプルと同様/同じであることを示す。Planarモードは、行/列に沿った一連のブロック(たとえば、平面)が、行の端の近傍ブロックに基づいて補間され得ることを示す。実際に、planarモードは、変化する値の比較的一定の勾配を用いることによって行/列間の光/色の滑らかな遷移を示す。DCモードは、境界の平滑化のために使用され、ブロックが方向性予測モードの角度方向に関連付けられるすべての近傍ブロックのサンプルに関連付けられる平均値と同様/同じであることを示す。したがって、イントラ予測ブロックは、画像ブロックを実際の値の代わりに様々な関係予測モードの値として表し得る。さらに、インター予測ブロックは、実際の値の代わりに動きベクトルの値として画像ブロックを表し得る。いずれの場合も、予測ブロックは、場合によっては画像ブロックを正確に表さない可能性がある。すべての差が、残差ブロックに記憶される。ファイルをさらに圧縮するために、残差ブロックに変換が適用され得る。
【0044】
ステップ107において、様々なフィルタリング技術が適用され得る。HEVCにおいては、フィルタは、ループ内フィルタリング方式に従って適用される。上述のブロックに基づく予測は、デコーダにおいてブロックノイズのある画像の生成をもたらす可能性がある。さらに、ブロックに基づく予測方式は、ブロックを符号化し、ついで符号化されたブロックを参照ブロックとして後に使用するために再構築し得る。ループ内フィルタリング方式は、ノイズ抑制フィルタ、デブロッキングフィルタ、適応ループフィルタ(adaptive loop filter)、およびサンプル適応オフセット(SAO: sample adaptive offset)フィルタをブロック/フレームに反復的に適用する。これらのフィルタは、符号化されたファイルが正確に再構築され得るようにこのようなブロッキングアーティファクトを軽減する。さらに、これらのフィルタは、アーティファクトが再構築された参照ブロックに基づいて符号化される後続のブロックにおいてさらなるアーティファクトを生じる可能性がより低くなるように、再構築された参照ブロック内のアーティファクトを軽減する。
【0045】
いったんビデオ信号が区分化され、圧縮され、フィルタリングされると、結果として得られるデータは、ステップ109においてビットストリームに符号化される。ビットストリームは、上述のデータと、デコーダにおいて適切なビデオ信号の再構築をサポートするために望ましい任意のシグナリングデータとを含む。たとえば、このようなデータは、区分化データ、予測データ、残差ブロック、およびデコーダにコーディングの命令を与える様々なフラグを含み得る。ビットストリームは、要求に応じてデコーダに送信するためにメモリに記憶され得る。ビットストリームはまた、複数のデコーダにブロードキャストおよび/またはマルチキャストされ得る。ビットストリームの生成は、反復的なプロセスである。したがって、ステップ101、103、105、107、および109は、多くのフレームおよびブロックにわたって連続的におよび/または同時に行われる可能性がある。
図1に示された順序は、検討の明瞭さおよび容易さのために提示されており、ビデオコーディングプロセスを特定の順序に限定するように意図されていない。
【0046】
デコーダは、ステップ111においてビットストリームを受信し、復号プロセスを開始する。具体的には、デコーダは、エントロピー復号方式を使用して、ビットストリームを対応するシンタックスおよびビデオデータに変換する。デコーダは、ステップ111において、ビットストリームからのシンタックスデータを用いてフレームについての区分を決定する。区分化は、ステップ103におけるブロックの区分化の結果と一致するべきである。ステップ111において使用されるエントロピー符号化/復号について、以下説明する。エンコーダは、入力画像内の値の空間的な位置決めに基づいていくつかの可能な選択肢からブロック区分化方式を選択するなど、圧縮プロセス中に多くの選択を行う。厳密にそのままの選択をシグナリングすることは、多数のビン(bin)を使用し得る。本明細書において使用されるとき、ビンは、変数として扱われる2進値(たとえば、状況に応じて変わる可能性があるビット値)である。エントロピーコーディングは、エンコーダが特定の場合に明らかにうまくいかないすべての選択肢を破棄し、許容可能な選択肢のセットを残すことを可能にする。それぞれの許容可能な選択肢は、ついでコードワードを割り振られる。コードワードの長さは、許容可能な選択肢の数に基づく(たとえば、2つの選択肢のために1つのビン、3つから4つまでの選択肢のために2つのビンなど)。そして、エンコーダは、選択された選択肢についてのコードワードを符号化する。この方式は、コードワードのサイズを削減し、なぜならば、すべての可能な選択肢の潜在的に大きなセットからの選択を一意に示すのとは対照的に、コードワードは、許容可能な選択肢の小さなサブセットからの選択を一意に示すために望ましいだけの大きさであるからである。デコーダは、ついでエンコーダと同様の方法で、許容可能な選択肢のセットを決定することによって選択を復号する。許容可能な選択肢のセットを決定することによって、デコーダは、コードワードを読み、エンコーダによってなされる選択を決定することができる。
【0047】
ステップ113において、デコーダは、ブロックの復号を行う。具体的には、デコーダは、逆変換を用いて残差ブロックを生成する。ついでデコーダは、残差ブロックおよび対応する予測ブロックを用いて、区分化に従って画像ブロックを再構築する。予測ブロックは、ステップ105においてエンコーダで生成されたイントラ予測ブロックとインター予測ブロックとの両方を含み得る。再構築された画像ブロックは、ついでステップ111において決定された区分化データに従って再構築されたビデオ信号のフレーム内に位置付けられる。ステップ113のためのシンタックスも、上述のエントロピーコーディングによってビットストリーム内でシグナリングされ得る。
【0048】
ステップ115において、エンコーダのステップ107と同様にして、再構築されたビデオ信号のフレームに対してフィルタリングが行われる。たとえば、ノイズ抑制フィルタ、デブロッキングフィルタ、適応ループフィルタ、およびSAOフィルタが、ブロッキングアーティファクトを取り除くためにフレームに適用され得る。フレームがフィルタリングされると、ビデオ信号が、エンドユーザによる視聴のためにステップ117においてディスプレイに出力され得る。
【0049】
図2は、ビデオコーディングのための例示的なコーディングおよびデコーディング(コーデック)システム200の概略図である。具体的には、コーデックシステム200は、動作方法100の実装をサポートするための機能を提供する。コーデックシステム200は、エンコーダとデコーダの両方において使用される構成要素を図示するよう一般化されている。コーデックシステム200は、動作方法100のステップ101および103について検討されたようにビデオ信号を受信し、区分化し、その結果、区分化されたビデオ信号201を生じる。ついで、コーデックシステム200は、方法100のステップ105、107、および109について検討されたようにエンコーダとして働くとき、区分化されたビデオ信号201をコーディングされたビットストリームへと圧縮する。デコーダとして働くとき、コーデックシステム200は、動作方法100のステップ111、113、115、および117について検討されたように、ビットストリームから出力ビデオ信号を生成する。コーデックシステム200は、一般コーダ制御構成要素211、変換・スケーリングおよび量子化構成要素213、イントラピクチャ推定構成要素215、イントラピクチャ予測構成要素217、動き補償構成要素219、動き推定構成要素221、スケーリングおよび逆変換構成要素229、フィルタ制御分析構成要素227、ループ内フィルタ構成要素225、復号ピクチャバッファ構成要素223、ならびにヘッダフォーマットおよびコンテキスト適応2値算術コーディング(CABAC: context adaptive binary arithmetic coding)構成要素231を含む。このような構成要素は、図示のように結合される。
図2において、黒い線は、符号化される/復号されるデータの動きを示し、一方、破線は、他の構成要素の動作を制御する制御データの動きを示す。コーデックシステム200の構成要素は、エンコーダにすべて存在しうる。デコーダは、コーデックシステム200の構成要素のサブセットを含みうる。たとえば、デコーダは、イントラピクチャ予測構成要素217、動き補償構成要素219、スケーリングおよび逆変換構成要素229、ループ内フィルタ構成要素225、ならびに復号ピクチャバッファ構成要素223を含みうる。これらの構成要素について、以下説明する。
【0050】
区分化されたビデオ信号201は、コーディングツリーによってピクセルのブロックに区分化されたキャプチャされたビデオシーケンスである。コーディングツリーは、様々な分割モードを用いてピクセルのブロックをピクセルのより小さなブロックに細分化する。ついで、これらのブロックは、より小さなブロックにさらに細分化され得る。ブロックは、コーディングツリーのノードと称されうる。より大きな親ノードが、より小さな子ノードに分割される。ノードが細分化される回数は、ノード/コーディングツリーの深さと称される。分割されたブロックは、場合によってはコーディングユニット(CU)に含まれ得る。たとえば、CUは、ルマブロック、赤色差(Cr)ブロック、および青色差(Cb)ブロックをCUについての対応するシンタックス命令とともに含むCTUの下位部分であり得る。分割モードは、使用される分割モードに応じて変化する形状の2つ、3つ、または4つの子ノードにノードをそれぞれ区分化するために使用される二分木(BT)、三分木(TT)、および四分木(QT)を含みうる。区分化されたビデオ信号201は、圧縮のために一般コーダ制御構成要素211、変換・スケーリングおよび量子化構成要素213、イントラピクチャ推定構成要素215、フィルタ制御分析構成要素227、ならびに動き推定構成要素221に転送される。
【0051】
一般コーダ制御構成要素211は、アプリケーションの制約に従ってビットストリームへのビデオシーケンスの画像のコーディングに関連する決定を行うように構成される。たとえば、一般コーダ制御構成要素211は、ビットレート/ビットストリームサイズ対再構築の品質の最適化を管理する。このような決定は、ストレージ空間/帯域幅の可用性および画像解像度の要求に基づいてなされ得る。また、一般コーダ制御構成要素211は、バッファアンダーランおよびオーバーランの問題を軽減するために、伝送速度を踏まえてバッファの利用を管理する。これらの問題を管理するために、一般コーダ制御構成要素211は、他の構成要素による区分化、予測、およびフィルタリングを管理する。たとえば、一般コーダ制御構成要素211は、解像度を上げ、帯域幅の使用を増やすために、圧縮の複雑さを動的に高くするか、または解像度を下げ、帯域幅の使用を減らすために、圧縮の複雑さを動的に低くし得る。したがって、一般コーダ制御構成要素211は、ビデオ信号の再構築の品質とビットレートの懸念とのバランスを取るためにコーデックシステム200の他の構成要素を制御する。一般コーダ制御構成要素211は、他の構成要素の動作を制御する制御データを生成する。制御データも、デコーダにおける復号のためのパラメータをシグナリングするためにビットストリームに符号化されるようにヘッダフォーマットおよびCABAC構成要素231に転送される。
【0052】
区分化されたビデオ信号201は、インター予測のために動き推定構成要素221および動き補償構成要素219にも送信される。区分化されたビデオ信号201のフレームまたはスライスは、複数のビデオブロックに分割され得る。動き推定構成要素221および動き補償構成要素219は、時間予測を提供するために1つまたは複数の参照フレーム内の1つまたは複数のブロックに対する受信されたビデオブロックのインター予測コーディングを実行する。コーデックシステム200は、たとえば、ビデオデータの各ブロックについての適切なコーディングモードを選択するために複数のコーディングパス(coding pass)を実行し得る。
【0053】
動き推定構成要素221および動き補償構成要素219は、高度に一体化されうるが、概念的な目的のため別々に図示される。動き推定構成要素221によって行われる動き推定は、ビデオブロックについての動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、予測ブロックに対するコーディングされるオブジェクトの変位を示し得る。予測ブロックは、ピクセルの差の観点で、コーディングされるブロックによく一致することが分かっているブロックである。予測ブロックは、参照ブロックとも称されうる。このようなピクセルの差は、差分絶対値和(SAD)、差分二乗和(SSD)、または他の差の測定基準によって決定され得る。HEVCは、CTU、コーディングツリーブロック(CTB)、およびCUを含むいくつかのコーディングされるオブジェクトを使用する。たとえば、CTUは、CTBに分割されることができ、ついで、CTBが、CUに含めるためにCBに分割されることができる。CUは、CUのための予測データを含む予測ユニット(PU)および/または変換された残差データを含む変換ユニット(TU)として符号化され得る。動き推定構成要素221は、レート歪み最適化プロセスの一部としてレート歪み分析を用いることによって動きベクトル、PU、およびTUを生成する。たとえば、動き推定構成要素221は、現在のブロック/フレームについての複数の参照ブロック、複数の動きベクトルなどを決定してもよく、最良のレート歪みの特徴を有する参照ブロック、動きベクトルなどを選択してもよい。最良のレート歪みの特徴は、ビデオの再構築の品質(たとえば、圧縮によるデータ損失の量)とコーディングの効率(たとえば、最終的な符号化のサイズ)との両方のバランスを取る。
【0054】
いくつかの例において、コーデックシステム200は、復号ピクチャバッファ構成要素223に記憶された参照ピクチャの整数よりも細かいピクセル位置の値を計算し得る。たとえば、ビデオコーデックシステム200は、参照ピクチャの4分の1ピクセル位置、8分の1ピクセル位置、または他の分数ピクセル(fractional pixel)位置の値を補間し得る。したがって、動き推定構成要素221は、フルピクセル(full pixel)位置および分数ピクセル位置に対する動き探索を行い、分数ピクセルの精度で動きベクトルを出力し得る。動き推定構成要素221は、インターコーディングされるスライス内のビデオブロックのPUについての動きベクトルを、PUの位置を参照ピクチャの予測ブロックの位置と比較することによって計算する。動き推定構成要素221は、計算された動きベクトルを符号化のためにヘッダフォーマットおよびCABAC構成要素231に動きデータとして出力し、動きを動き補償構成要素219に出力する。
【0055】
動き補償構成要素219によって行われる動き補償は、動き推定構成要素221によって決定された動きベクトルに基づいて予測ブロックを取り出すことまたは生成することを含み得る。やはり、動き推定構成要素221および動き補償構成要素219は、いくつかの例において、機能的に統合されうる。現在のビデオブロックのPUについての動きベクトルを受信すると、動き補償構成要素219は、動きベクトルが指す予測ブロックを見つけ得る。そして、コーディングされている現在のビデオブロックのピクセル値から予測ブロックのピクセル値を引き、ピクセル差分値を形成することによって残差ビデオブロックが形成される。概して、動き推定構成要素221は、ルマ成分に対する動き推定を行い、動き補償構成要素219は、クロマ成分とルマ成分との両方のためにルマ成分に基づいて計算された動きベクトルを用いる。予測ブロックおよび残差ブロックは、変換・スケーリングおよび量子化構成要素213に転送される。
【0056】
区分化されたビデオ信号201は、イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217にも送信される。動き推定構成要素221および動き補償構成要素219と同様に、イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217は、高度に一体化されうるが、概念的な目的のために別々に図示される。イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217は、上述のようにフレーム間で動き推定構成要素221および動き補償構成要素219によって行われるインター予測に代わるものとして現在のフレーム内のブロックに対して現在のブロックをイントラ予測する。特に、イントラピクチャ推定構成要素215は、現在のブロックを符号化するために用いるイントラ予測モードを決定する。いくつかの例において、イントラピクチャ推定構成要素215は、複数のテストされたイントラ予測モードから、現在のブロックを符号化するための適切なイントラ予測モードを選択する。ついで、選択されたイントラ予測モードは、符号化のためにヘッダフォーマットおよびCABAC構成要素231に転送される。
【0057】
たとえば、イントラピクチャ推定構成要素215は、様々なテストされたイントラ予測モードについてのレート歪み分析を用いてレート歪み値を計算し、テストされたモードの中で最良のレート歪みの特徴を有するイントラ予測モードを選択する。レート歪み分析は、概して、符号化されたブロックと、符号化されたブロックを生成するために符号化された元の符号化されていないブロックとの間の歪み(または誤差)の量と、符号化されたブロックを生成するために用いられたビットレート(たとえば、ビット数)とを決定する。イントラピクチャ推定構成要素215は、どのイントラ予測モードがブロックについて最良のレート歪み値を示すかを決定するために、様々な符号化されたブロックについての歪みおよびレートから比率を計算する。さらに、イントラピクチャ推定構成要素215は、レート歪み最適化(RDO)に基づいて深度モデリングモード(DMM: depth modeling mode)を用いて深度マップの深度ブロックをコーディングするように構成されうる。
【0058】
イントラピクチャ予測構成要素217は、エンコーダに実装されるとき、イントラピクチャ推定構成要素215によって決定された選択されたイントラ予測モードに基づいて予測ブロックから残差ブロックを生成し得るか、またはデコーダに実装されるとき、ビットストリームから残差ブロックを読み得る。残差ブロックは、行列として表された、予測ブロックと元のブロックとの間の値の差を含む。残差ブロックは、ついで、変換・スケーリングおよび量子化構成要素213に転送される。イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217は、ルマ成分とクロマ成分との両方に対して動作し得る。
【0059】
変換・スケーリングおよび量子化構成要素213は、残差ブロックをさらに圧縮するように構成される。変換・スケーリングおよび量子化構成要素213は、残差ブロックに離散コサイン変換(DCT)、離散サイン変換(DST)、または似た概念の変換といった変換を適用し、残差変換係数値を含むビデオブロックを生成する。ウェーブレット変換、整数変換、サブバンド変換、または他の種類の変換も、使用されうる。変換は、残差情報をピクセル値領域から周波数領域などの変換領域に変換し得る。変換・スケーリングおよび量子化構成要素213は、たとえば、周波数に基づいて変換された残差情報をスケーリングするようにさらに構成される。このようなスケーリングは、異なる周波数情報が異なる粒度で量子化されるように残差情報にスケール因子を適用することを含み、これは、再構築されたビデオの最終的な視覚的品質に影響を与えうる。変換・スケーリングおよび量子化構成要素213は、ビットレートをさらに下げるために変換係数を量子化するようにさらに構成される。量子化プロセスは、係数の一部またはすべてに関連付けられるビット深度を削減し得る。量子化の度合いは、量子化パラメータを調整することによって修正され得る。いくつかの例において、変換・スケーリングおよび量子化構成要素213は、ついで、量子化された変換係数を含む行列のスキャンを行い得る。量子化された変換係数は、ビットストリームに符号化されるためにヘッダフォーマットおよびCABAC構成要素231に転送される。
【0060】
スケーリングおよび逆変換構成要素229は、動き推定をサポートするために変換・スケーリングおよび量子化構成要素213の逆の演算を適用する。スケーリングおよび逆変換構成要素229は、たとえば、他の現在のブロックのための予測ブロックになる可能性がある参照ブロックとしての後の使用のために、ピクセル領域の残差ブロックを再構築するために逆スケーリング、逆変換、および/または逆量子化を適用する。動き推定構成要素221および/または動き補償構成要素219は、後のブロック/フレームの動き推定における使用のために対応する予測ブロックに残差ブロックを足して戻すことによって参照ブロックを計算し得る。スケーリング、量子化、および変換中に生じたアーティファクトを軽減するために、再構築された参照ブロックにフィルタが適用される。このようなアーティファクトは、さもでなければ、後続のブロックが予測されるときに、不正確な予測をもたらす(およびさらなるアーティファクトを生じる)。
【0061】
フィルタ制御分析構成要素227およびループ内フィルタ構成要素225は、残差ブロックおよび/または再構築された画像ブロックにフィルタを適用する。たとえば、スケーリングおよび逆変換構成要素229からの変換された残差ブロックは、元の画像ブロックを再構築するためにイントラピクチャ予測構成要素217および/または動き補償構成要素219からの対応する予測ブロックと組み合わされ得る。ついで、再構築された画像ブロックにフィルタが適用され得る。いくつかの例において、フィルタは、その代わりに残差ブロックに適用され得る。
図2の他の構成要素と同様に、フィルタ制御分析構成要素227およびループ内フィルタ構成要素225は、高度に一体化され、一緒に実装されうるが、概念的な目的のために別々に図示される。再構築された参照ブロックに適用されるフィルタは、特定の空間的な領域に適用され、このようなフィルタがどのように適用されるかを調整するための複数のパラメータを含む。フィルタ制御分析構成要素227は、このようなフィルタがどこに適用されるべきかを決定するために再構築された参照ブロックを分析し、対応するパラメータを設定する。このようなデータは、符号化のためにフィルタ制御データとしてヘッダフォーマットおよびCABAC構成要素231に転送される。ループ内フィルタ構成要素225は、フィルタ制御データに基づいてこのようなフィルタを適用する。フィルタは、デブロッキングフィルタ、ノイズ抑制フィルタ、SAOフィルタ、および適応ループフィルタを含み得る。このようなフィルタは、例によっては、(たとえば、再構築されたピクセルブロックに対して)空間/ピクセル領域において、または周波数領域において適用され得る。
【0062】
エンコーダとして動作するとき、フィルタリングされた再構築された画像ブロック、残差ブロック、および/または予測ブロックは、上述されたように、動き推定において後の使用のために復号ピクチャバッファ構成要素223に記憶される。デコーダとして動作するとき、復号ピクチャバッファ構成要素223は、再構築され、フィルタリングされたブロックを記憶し、出力ビデオ信号の一部としてディスプレイに転送する。復号ピクチャバッファ構成要素223は、予測ブロック、残差ブロック、および/または再構築された画像ブロックを記憶することが可能な任意のメモリデバイスであってよい。
【0063】
ヘッダフォーマットおよびCABAC構成要素231は、コーデックシステム200の様々な構成要素からデータを受信し、このようなデータをデコーダに送信するためにコーディングされたビットストリームに符号化する。具体的には、ヘッダフォーマットおよびCABAC構成要素231は、一般的な制御データおよびフィルタ制御データなどの制御データを符号化するための様々なヘッダを生成する。さらに、イントラ予測および動きデータを含む予測データならびに量子化された変換係数データの形態の残差データは、すべてビットストリームに符号化される。最終的なビットストリームは、元の区分化されたビデオ信号201を再構築するためにデコーダによって望まれるすべての情報を含む。このような情報は、イントラ予測モードのインデックステーブル(コードワードマッピングテーブルとも称される)、様々なブロックについての符号化コンテキストの定義、最も可能性が高いイントラ予測モードのしるし、区分化情報のしるしなども含み得る。このようなデータは、エントロピーコーディングを用いることによって符号化され得る。たとえば、情報は、コンテキスト適応可変長コーディング(CAVLC: context adaptive variable length coding)、CABAC、シンタックスに基づくコンテキスト適応2値算術コーディング(SBAC: syntax-based context-adaptive binary arithmetic coding)、確率間隔区分エントロピー(PIPE: probability interval partitioning entropy)コーディング、または他のエントロピーコーディング技術を用いて符号化されうる。エントロピーコーディングの後、コーディングされたビットストリームが、他のデバイス(たとえば、ビデオデコーダ)に送信されるか、または後で送信するかもしくは取り出すためにアーカイブされ得る。
【0064】
図3は、例示的なビデオエンコーダ300を示すブロック図である。ビデオエンコーダ300は、コーデックシステム200の符号化機能を実施する、ならびに/または動作方法100のステップ101、103、105、107、および/もしくは109を実施するために使用され得る。エンコーダ300は、入力ビデオ信号を区分化し、区分化されたビデオ信号201と実質的に同様である区分化されたビデオ信号301を生じる。ついで、区分化されたビデオ信号301は、エンコーダ300の構成要素によって圧縮され、ビットストリームに符号化される。
【0065】
具体的には、区分化されたビデオ信号301は、イントラ予測のためにイントラピクチャ予測構成要素317に転送される。イントラピクチャ予測構成要素317は、イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217と実質的に同様でありうる。区分化されたビデオ信号301は、復号ピクチャバッファ構成要素323内の参照ブロックに基づくインター予測のために動き補償構成要素321にも転送される。動き補償構成要素321は、動き推定構成要素221および動き補償構成要素219と実質的に同様でありうる。イントラピクチャ予測構成要素317および動き補償構成要素321からの予測ブロックおよび残差ブロックは、残差ブロックの変換および量子化のために変換および量子化構成要素313に転送される。変換および量子化構成要素313は、変換・スケーリングおよび量子化構成要素213と実質的に同様でありうる。変換され、量子化された残差ブロックおよび対応する予測ブロックは、ビットストリームにコーディングするためにエントロピーコーディング構成要素331に(関連付けられる制御データと一緒に)転送される。エントロピーコーディング構成要素331は、ヘッダフォーマットおよびCABAC構成要素231と実質的に同様でありうる。
【0066】
変換され、量子化された残差ブロックおよび/または対応する予測ブロックはまた、動き補償構成要素321による使用のために参照ブロックへと再構築するために変換および量子化構成要素313から逆変換および量子化構成要素329に転送される。逆変換および量子化構成要素329は、スケーリングおよび逆変換構成要素229と実質的に同様でありうる。ループ内フィルタ構成要素325のループ内フィルタもまた、例によっては残差ブロックおよび/または再構築された参照ブロックに適用される。ループ内フィルタ構成要素325は、フィルタ制御分析構成要素227およびループ内フィルタ構成要素225と実質的に同様でありうる。ループ内フィルタ構成要素325は、ループ内フィルタ構成要素225について検討されたように複数のフィルタを含み得る。そして、フィルタリングされたブロックは、動き補償構成要素321による参照ブロックとしての使用のために復号ピクチャバッファ構成要素323に記憶される。復号ピクチャバッファ構成要素323は、復号ピクチャバッファ構成要素223と実質的に同様でありうる。
【0067】
図4は、例示的なビデオデコーダ400を示すブロック図である。ビデオデコーダ400は、コーデックシステム200の復号機能を実施する、ならびに/または動作方法100のステップ111、113、115、および/もしくは117を実施するために使用されうる。デコーダ400は、たとえば、エンコーダ300からビットストリームを受信し、エンドユーザに対して表示するためにビットストリームに基づいて再構築された出力ビデオ信号を生成する。
【0068】
ビットストリームは、エントロピー復号構成要素433によって受信される。エントロピー復号構成要素433は、CAVLC、CABAC、SBAC、PIPEコーディング、または他のエントロピーコーディング技術などのエントロピー復号方式を実施するように構成される。たとえば、エントロピー復号構成要素433は、ビットストリームにコードワードとしてコーディングされたさらなるデータを解釈するためのコンテキストを与えるためにヘッダ情報を使用し得る。復号された情報は、一般的な制御データ、フィルタ制御データ、区分化情報、動きデータ、予測データ、および残差ブロックからの量子化された変換係数などの、ビデオ信号を復号するための任意の所望の情報を含む。量子化された変換係数は、残差ブロックへの再構築のために逆変換および量子化構成要素429に転送される。逆変換および量子化構成要素429は、逆変換および量子化構成要素329と同様でありうる。
【0069】
再構築された残差ブロックおよび/または予測ブロックは、イントラ予測動作に基づいて画像ブロックへと再構築するためにイントラピクチャ予測構成要素417に転送される。イントラピクチャ予測構成要素417は、イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217と同様でありうる。具体的には、イントラピクチャ予測構成要素417は、予測モードを用いてフレーム内の参照ブロックをみつけ、イントラ予測された画像ブロックを再構築するために結果に残差ブロックを適用する。再構築されたイントラ予測された画像ブロックおよび/または残差ブロックならびに対応するインター予測データは、ループ内フィルタ構成要素425を介して復号ピクチャバッファ構成要素423に転送され、これらの構成要素は、それぞれ、復号ピクチャバッファ構成要素223およびループ内フィルタ構成要素225と実質的に同様でありうる。ループ内フィルタ構成要素425は、再構築された画像ブロック、残差ブロック、および/または予測ブロックをフィルタリングし、このような情報は、復号ピクチャバッファ構成要素423に記憶される。復号ピクチャバッファ構成要素423からの再構築された画像ブロックは、インター予測のために動き補償構成要素421に転送される。動き補償構成要素421は、動き推定構成要素221および/または動き補償構成要素219と実質的に同様でありうる。具体的には、動き補償構成要素421は、参照ブロックからの動きベクトルを使用して予測ブロックを生成し、画像ブロックを再構築するために結果に残差ブロックを適用する。結果として得られる再構築されたブロックは、ループ内フィルタ構成要素425を介して復号ピクチャバッファ構成要素423にやはり転送され得る。復号ピクチャバッファ構成要素423は、さらなる再構築された画像ブロックの記憶を続け、それらの再構築された画像ブロックは、区分化情報によってフレームに再構築され得る。また、このようなフレームは、シーケンスに配置され得る。シーケンスは、再構築された出力ビデオ信号としてディスプレイに出力される。
【0070】
図5は、WPP 500の例示的なメカニズムを示す概略図である。たとえば、WPP 500は、スライス501を符号化するおよび/または復号するために方法100の一部として使用され得る。したがって、WPP 500は、コーデックシステム200、エンコーダ300、および/またはデコーダ400によって使用され得る。
【0071】
図示されるように、WPP 500は、スライス501に適用される。スライス501は、ピクチャの区分である。具体的には、ピクチャは、1つまたは複数のスライス501に区分化され得る。スライス501は、整数個の連続した完全なCTUの行521、522、523、524、および525を含み得る。さらに、スライス501ならびにすべての細分化されたもの(たとえば、CTU 511および512)は、単一のNALユニットに排他的に含まれる。スライス501が整数個の連続した完全なCTUの行521、522、523、524、および525を含むとき、WPP 500が適用され得る。任意選択で、いくつかの例において、スライス501は、1つまたは複数のタイルを含んでもよく、このようなタイルが、それぞれ、整数個の連続した完全なCTUの行521、522、523、524、および525を含み得る。したがって、スライス501は、VVC規格において、単一のNALユニットに排他的に含まれるピクチャの整数個の完全なタイルまたはタイル内の整数個の連続する完全なCTUの行521~525として定義される。
【0072】
スライス501は、CTU 511および512を含む。CTU 511/512は、コーディングツリーによってコーディングブロックに区分化され得る予め定義されたサイズのサンプルのグループである。たとえば、CTU 511および512は、CTUの行521~525およびCTUの列516に配置され得る。CTUの行521~525は、スライス501の左の境界とスライス501の右の境界との間に水平に延びるCTU 511/512のグループである。CTUの列516は、スライス501の上の境界とスライス501の下の境界との間に垂直に延びるCTU 511/512のグループである。
【0073】
WPP 500は、CTU 511/512をコーディングするために並列に動作する複数の計算スレッドを使用し得る。図示された例において、CTU 511は、既にコーディングされており、CTU 512は、まだコーディングされていない。たとえば、第1のスレッドが、第1の時間にCTUの行521のコーディングを開始し得る。CTU 511が第1のCTUの行521においてコーディングされると、第2のスレッドが、CTUの行522のコーディングを開始し得る。CTU 511が第2のCTUの行522においてコーディングされると、第3のスレッドが、CTUの行523のコーディングを開始し得る。CTU 511が第3のCTUの行523においてコーディングされると、第4のスレッドが、CTUの行524のコーディングを開始し得る。CTU 511が第4のCTUの行524においてコーディングされると、第5のスレッドが、第5のCTUの行525のコーディングを開始し得る。これは、
図5に示されるパターンをもたらす。さらなるスレッドが、要望に応じて使用され得る。このメカニズムは、波面に似た見た目のパターンを生じ、したがって、WPP 500の名前とされる。いくつかのビデオコーディングは、現在のCTU 512の上または左に位置するコーディングされたCTU 511に基づいて現在のCTU 512をコーディングする。WPP 500は、コーディングされる任意の現在のCTU 512に到達するときにこのようなCTU 511が既にコーディングされていることを保証するために、各スレッドの開始の間にCTU 511コーディング遅延を残す。VVC規格を用いるシステムが1つのCTU 511コーディング遅延を用い得る一方、HEVCなどの他のシステムは2つのCTU 511コーディング遅延を用い得ることに留意されたい。任意の他のCTU 511コーディング遅延の値も、本開示の範囲内で用いられ得る。
【0074】
CTU 511は、CTUの行521~525においてビットストリームにコーディングされる。たとえば、CTUの行521が、ビットストリームに含められ、その後にCTUの行522が続き、その後にCTUの行523が続き、その後にCTUの行524が続き、その後にCTUの行525が続き、以下同様であってもよい。各CTUの行521~525は、ビットストリーム内のスライス501の独立してアドレス指定可能なサブセットであってもよい。たとえば、各CTUの行521~525は、エントリポイント517においてアドレス指定され得る。エントリポイント517は、スライス501が符号化された後、スライス501の対応するサブセットについてのビデオデータの最初のビットを含むビットストリーム内のビット位置である。WPP 500が用いられるとき、エントリポイント517は、対応するCTUの行521~525の最初のビットを含むビット位置である。たとえば、CTUの行523のエントリポイント517は、CTUの行523についてのビデオデータの最初のビットを含み、CTUの行522についてのビデオデータの最後のビットの後に位置付けられる。したがって、エントリポイントの数(NumEntryPoints)518は、CTUの行521~525についてのエントリポイント517の数である。
【0075】
いくつかのビデオコーディングシステムにおいては、エントリポイント517についてのビットオフセットは、スライス501に関連付けられるスライスヘッダの中の配列内でシグナリングされ得る。さらに、エンコーダは、NumEntryPoints 518を決定することができ、このようなデータをスライスヘッダ内で、たとえば、num_entry_point_offsetsパラメータ内でシグナリングする。デコーダは、ついでエントリポイント517の数を用いて、復号を開始するためのすべての関連のあるエントリポイント517を取得するために配列からいくつのビットオフセットが取得されるべきであるかを決定することができる。num_entry_point_offsetsパラメータは、複数のビットを含み、各スライスヘッダ内でシグナリングされる。各ピクチャはいくつかのスライス501を含んでもよく、ビデオシーケンスは何千ものピクチャを含んでもよいので、num_entry_point_offsetsは、何回もシグナリングされ、ビデオシーケンス内のデータの量に著しい集合的な影響を与えうる。
【0076】
本開示は、ビットストリーム内でこのようなデータをシグナリングすることなくデコーダ(および/またはエンコーダのHRD)においてNumEntryPoints 518を導出するための様々なメカニズムを含む。したがって、num_entry_point_offsetsが、ビットストリームから省略されることができ、これは、全体的なビットストリームの圧縮を大幅に向上させる。たとえば、メカニズムは、スライス501がWPP 500によってコーディングされるときスライス501についてのNumEntryPoints 518を導出するために使用され得る。NumEntryPoints 518は、CTUの行521~525のサイズに基づいて、CTUの列516のサイズに基づいて、スライス501内のCTU 511/512の数に基づいて、ならびに/またはCTU 511/512および/もしくはスライス501のアドレスに基づいて導出され得る。
【0077】
たとえば、NumEntryPoints 518は、以下のように導出され得る。
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice - 1
}
ここで、!entropy_coding_sync_enabled_flagは、WPP 500が使われていないことを示し、NumBricksInCurrSliceは、スライス501内のタイルの数であり、numBrickSpecificCtuRowsInSliceは、スライス501内のCTUの行521~525の数であり、BrickHeight[ SliceBrickIdx[ i ] ]は、CTUの行521~525の高さ(したがってCTUの列516の高さ)である。entropy_coding_sync_enabled_flagは、WPP 500がスライス501をコーディングするために使用されるかどうかを示すために使用され得ることに留意されたい。たとえば、entropy_coding_sync_enabled_flagは、WPP 500が使用されるとき、1に設定され、WPP 500が使用されないとき、0に設定され得る。いくつかのコーディングシステムにおいて、!は、否定の値を示す。したがって、!entropy_coding_sync_enabled_flagは、上述の擬似コードのif節について、WPP 500が使用されていないことを示す。したがって、WPPは、上述の擬似コードのelse節について使用されている。
【0078】
例は、スライス501がWPP 500を用いるかどうかを確認する。WPP 500が用いられない場合、NumEntryPoints 518は、スライス501内のタイル数よりも1少ない。それ以外の場合、WPP 500が用いられる。このような場合、例は、スライス501の高さ(およびしたがってCTUの列516の高さ)と比較してCTUの行521~525の各々の高さを合計することによってCTUの行521~525の数を決定する。NumEntryPoints 518は、CTUの行521~525の数よりも1少ない。
【0079】
図6は、例示的なビットストリーム600を示す概略図である。たとえば、ビットストリーム600は、方法100に従ってコーデックシステム200および/またはデコーダ400による復号のためにコーデックシステム200および/またはエンコーダ300によって生成され得る。さらに、ビットストリーム600は、WPP 500によってコーディングされたスライス501を含み得る。
【0080】
ビットストリーム600は、SPS 610、複数のピクチャパラメータセット(PPS)611、複数のスライスヘッダ615、および画像データ620を含む。SPS 610は、ビットストリーム600に含まれるコーディングされたビデオシーケンス内のすべてのピクチャに共通のシーケンスデータを含む。このようなデータは、ピクチャのサイズ設定、ビット深度、コーディングツールのパラメータ、ビットレートの制約などを含み得る。PPS 611は、ピクチャ全体に適用されるパラメータを含む。したがって、ビデオシーケンス内の各ピクチャは、PPS 611を参照し得る。各ピクチャはPPS 611を参照するが、いくつかの例においては、単一のPPS 611が複数のピクチャについてのデータを含み得ることに留意されたい。たとえば、複数の同様のピクチャは、同様のパラメータによってコーディングされ得る。このような場合、単一のPPS 611が、このような同様のピクチャについてのデータを含み得る。PPS 611は、対応するピクチャ内のスライスのために利用可能なコーディングツール、量子化パラメータ、オフセットなどを示し得る。スライスヘッダ615は、ピクチャ内の各スライスに固有のパラメータを含む。したがって、ビデオシーケンス内のスライス毎に1つのスライスヘッダ615が存在しうる。スライスヘッダ615は、スライスタイプ情報、POC、参照ピクチャリスト、予測の重み、タイルエントリポイント、デブロッキングパラメータなどを含み得る。スライスヘッダ615は、文脈によってはタイルグループヘッダとも称されうることに留意されたい。
【0081】
画像データ620は、インター予測および/またはイントラ予測によって符号化されたビデオデータならびに対応する変換され、量子化された残差データを含む。たとえば、ビデオシーケンスは、複数のピクチャ621を含む。ピクチャ621は、ビデオシーケンス内の対応する瞬間におけるユーザへの完全なまたは部分的な表示を目的とする完全な画像である。ピクチャ621は、単一のアクセスユニット(AU)に含まれ得る。ピクチャ621は、1つまたは複数のスライス623を含む。スライス623は、単一のNALユニットに排他的に含まれるピクチャ621の整数個の完全なタイルまたは(たとえば、タイル内の)整数個の連続する完全なCTUの行として定義され得る。たとえば、スライス623は、スライス501と実質的に同様でありうる。スライス623は、CTU 625および/またはコーディングツリーブロック(CTB)にさらに分割される。CTU 625は、コーディングツリーによって区分化され得る予め定義されたサイズのサンプルのグループである。たとえば、ビットストリーム600内のCTU 625は、符号化されており、したがって、CTU 511と実質的に同様でありうる。CTBは、CTU 625のサブセットであり、CTUのルマ成分またはクロマ成分を含む。CTU 625/CTBは、コーディングツリーに基づいてコーディングブロックにさらに分割される。そして、コーディングブロックが、予測メカニズムによって符号化/復号され得る。
【0082】
上述のように、NumEntryPoints 518は、デコーダにおいて決定され得る。したがって、スライスヘッダ615は、num_entry_point_offsetsパラメータ、またはNumEntryPoints 518の値を示す他のパラメータを含まない。num_entry_point_offsetsは、各スライスヘッダ615から削除され、ビットストリーム600が、圧縮される。これは、エンコーダとデコーダとの両方においてメモリおよびネットワークリソースの使用を削減する。
【0083】
上述の情報について、以下、本明細書においてより詳細に説明する。映像コーデックの仕様において、ピクチャは、複数の目的で特定されるべきである。これらは、インター予測における参照ピクチャとしての使用のため、DPBからのピクチャの出力のため、動きベクトルのスケーリングのため、重み付けされた予測ためなどを含む。たとえば、ピクチャは、ピクチャ順序カウント(POC)によって特定され得る。いくつかのビデオコーディングシステムにおいては、DPB内のピクチャは、短期的参照のために使用されるか、長期的参照のために使用されるか、または参照のために使用されないものとしてマーキングされ得る。ピクチャが参照のために使用されないものとしてマーキングされると、ピクチャは、もはや予測のために使用され得ない。このようなピクチャがもはや出力のために必要とされないとき、ピクチャは、DPBから削除され得る。
【0084】
いくつかのビデオコーディングシステムは、短期および長期参照ピクチャを用いる。参照ピクチャは、ピクチャが予測参照としての使用のためにもはや必要とされないとき、参照のために使用されないものとしてマーキングされ得る。これらの3つのステータス(たとえば、短期、長期、および参照のために使用されない)の間のピクチャの変換は、復号された参照ピクチャのマーキングプロセスによって制御され得る。たとえば、暗黙的なスライディングウィンドウプロセスおよび/または明示的なメモリ管理制御動作(MMCO: memory management control operation)プロセスが、参照ピクチャをマーキングするために用いられ得る。スライディングウィンドウプロセスは、参照フレームの数がSPS内に記憶され得る参照フレームの最大数(max_num_ref_frames)に等しいとき、短期参照ピクチャを参照のために使用されないものとしてマーキングする。短期参照ピクチャは、最も新しく復号された短期ピクチャがDPBに保有されるように先入れ先出し方式で記憶され得る。明示的なMMCOプロセスは、複数のMMCOコマンドを含み得る。MMCOコマンドは、1つもしくは複数の短期もしくは長期参照ピクチャを参照のために使用されないものとしてマーキングする可能性があり、すべてのピクチャを参照のために使用されないものとしてマーキングする可能性があり、または現在の参照ピクチャもしくは既存の短期参照ピクチャを長期としてマーキングし、その長期参照ピクチャに長期ピクチャインデックスを割り振る可能性がある。いくつかのビデオコーディングシステムにおいては、参照ピクチャのマーキング動作ならびにDPBからのピクチャの出力および削除のためのプロセスが、ピクチャが復号された後に行われる。
【0085】
他のビデオコーディングシステムは、参照ピクチャの管理のために参照ピクチャセット(RPS: reference picture set)を用いる。RPSプロセスとMMCO/スライディングウィンドウプロセスとの間の1つの違いは、現在のピクチャまたは任意の後続のピクチャによって使用される参照ピクチャの完全なセットが各スライスについて提供されることである。したがって、現在のまたは将来のピクチャによる使用のためにDPBに保有されるべきすべてのピクチャの完全なセットが、シグナリングされる。これは、DPBへの相対的な変更のみをシグナリングする方式とは異なる。RPSメカニズムは、DPB内の参照ピクチャの正しいステータスを維持するために、復号順で先のピクチャからの情報を保有する必要がない。ピクチャの復号およびDPBの動作の対応する変更は、RPSの利点を活かし、誤り耐性を高めるために使用されうる。いくつかのビデオコーディングシステムにおいて、ピクチャのマーキング、およびDPBからの復号されたピクチャの出力と削除との両方を含むバッファの動作は、現在のピクチャが復号された後に適用され得る。他のビデオコーディングシステムにおいて、RPSは、現在のピクチャのスライスヘッダから最初に復号される。そのとき、ピクチャのマーキングおよびバッファの動作は、概して、現在のピクチャを復号する前に適用される。
【0086】
他のビデオコーディングシステムは、参照ピクチャリスト0および参照ピクチャリスト1と表記される2つの参照ピクチャリストに基づいて参照ピクチャを管理する。この手法においては、ピクチャについての参照ピクチャリストが、参照ピクチャリスト初期化プロセスおよび参照ピクチャリスト修正プロセスを使用することなく直接構築され得る。さらに、参照ピクチャのマーキングが、2つの参照ピクチャリストに基づいて直接実行される。例示的な参照ピクチャの管理に関連するシンタックスおよびセマンティクス(semantics)は、以下の通りである。
【0087】
例示的なシーケンスパラメータセットのRBSPのシンタックスは、以下の通りである。
【0088】
【0089】
例示的なピクチャパラメータセットのRBSPのシンタックスは、以下の通りである。
【0090】
【0091】
一般スライスヘッダのシンタックスの例は、以下の通りである。
【0092】
【0093】
【0094】
例示的な参照ピクチャリスト構造のシンタックスは、以下の通りである。
【0095】
【0096】
例示的なシーケンスパラメータセットのRBSPのセマンティクスは、以下の通りである。log2_max_pic_order_cnt_lsb_minus4は、ピクチャ順序カウントについての復号プロセスにおいて使用される変数MaxPicOrderCntLsbの値を次のように指定する。
MaxPicOrderCntLsb = 2( log2_max_pic_order_cnt_lsb_minus4 + 4 ) (7-7)
log2_max_pic_order_cnt_lsb_minus4の値は、0と12を含んで0から12までの範囲内にありうる。sps_max_dec_pic_buffering_minus1に1を足した値は、ピクチャストレージバッファを単位としてCVSのための復号ピクチャバッファの最大の必要とされるサイズを指定する。sps_max_dec_pic_buffering_minus1の値は、0およびMaxDpbSize - 1を含んで0からMaxDpbSize - 1までの範囲内にありえ、MaxDpbSizeは、他のどこかで指定される。long_term_ref_pics_flagは、長期参照ピクチャ(LTRP)がCVS内のいかなるコーディングされるピクチャのインター予測にも使用されないことを指定するために0に等しいように設定され得る。long_term_ref_pics_flagは、LTRPがCVS内の1つまたは複数のコーディングされるピクチャのインター予測のために使用されうることを指定するために1に等しいように設定され得る。sps_idr_rpl_present_flagは、参照ピクチャリストのシンタックス要素がIDRピクチャのスライスヘッダ内に存在することを指定するために1に等しいように設定され得る。sps_idr_rpl_present_flagは、参照ピクチャリストのシンタックス要素がIDRピクチャのスライスヘッダ内に存在しないことを指定するために0に等しいように設定され得る。
【0097】
rpl1_same_as_rpl0_flagは、シンタックス構造num_ref_pic_lists_in_sps[ 1 ]およびref_pic_list_struct( 1, rplsIdx )が存在せず、以下が適用されることを指定するために1に等しいように設定され得る。num_ref_pic_lists_in_sps[ 1 ]の値は、num_ref_pic_lists_in_sps[ 0 ]の値に等しいと推測される。ref_pic_list_struct( 1, rplsIdx )の各シンタックス要素の値は、0からnum_ref_pic_lists_in_sps[ 0 ] - 1までの範囲のrplsIdxに関するref_pic_list_struct( 0, rplsIdx )の対応するシンタックス要素の値に等しいと推測される。num_ref_pic_lists_in_sps[ i ]は、SPSに含まれるlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の数を指定する。num_ref_pic_lists_in_sps[ i ]の値は、0および64を含んで0から64までの範囲内にありうる。(0または1に等しい)listIdxの各値に関して、デコーダは、現在のピクチャのスライスヘッダ内で直接シグナリングされた1つのref_pic_list_struct( listIdx, rplsIdx )シンタックス構造が存在し得るので、合計num_ref_pic_lists_in_sps[ i ] + 1個のref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のためにメモリを割り当てるべきである。
【0098】
例示的なピクチャパラメータセットのRBSPのセマンティクスは、以下の通りである。num_ref_idx_default_active_minus1[ i ]に1を足した値は、iが0に等しいとき、num_ref_idx_active_override_flagが0に等しいPまたはBスライスに関する変数NumRefIdxActive[ 0 ]の推測された値を指定し、iが1に等しいとき、num_ref_idx_active_override_flagが0に等しいBスライスに関するNumRefIdxActive[ 1 ]の推測された値を指定する。num_ref_idx_default_active_minus1[ i ]の値は、0および14を含んで0から14までの範囲内にあるべきである。rpl1_idx_present_flagは、ref_pic_list_sps_flag[ 1 ]およびref_pic_list_idx[ 1 ]がスライスヘッダ内に存在しないことを指定するために0に等しいように設定され得る。rpl1_idx_present_flagは、ref_pic_list_sps_flag[ 1 ]およびref_pic_list_idx[ 1 ]がスライスヘッダ内に存在しうることを指定するために1に等しいように設定され得る。
【0099】
一般スライスヘッダのセマンティクスの例は、以下の通りである。slice_pic_order_cnt_lsbは、ピクチャ順序カウントを現在のピクチャに関するMaxPicOrderCntLsbで割った余りを指定する。slice_pic_order_cnt_lsbシンタックス要素の長さは、log2_max_pic_order_cnt_lsb_minus4 + 4ビットである。slice_pic_order_cnt_lsbの値は、0およびMaxPicOrderCntLsb - 1を含んで0からMaxPicOrderCntLsb - 1までの範囲内にあるべきである。ref_pic_list_sps_flag[ i ]は、現在のスライスの参照ピクチャリストiがアクティブなSPS内でlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のうちの1つに基づいて導出されることを指定するために1に等しいように設定され得る。ref_pic_list_sps_flag[ i ]は、現在のピクチャの参照ピクチャリストiが現在のピクチャのスライスヘッダに直接含まれるlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造に基づいて導出されることを指定するために0に等しいように設定され得る。num_ref_pic_lists_in_sps[ i ]が0に等しいとき、ref_pic_list_sps_flag[ i ]の値は、0に等しいと推測される。rpl1_idx_present_flagが0に等しいとき、ref_pic_list_sps_flag[ 1 ]の値は、ref_pic_list_sps_flag[ 0 ]に等しいと推測される。
【0100】
ref_pic_list_idx[ i ]は、現在のピクチャの参照ピクチャリストiの導出のために使用されるlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の、アクティブなSPSに含まれるlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のリストへのインデックスを指定する。シンタックス要素ref_pic_list_idx[ i ]は、Ceil( Log2( num_ref_pic_lists_in_sps[ i ] ) )ビットによって表される。存在しないとき、ref_pic_list_idx[ i ]の値は、0に等しいと推測される。ref_pic_list_idx[ i ]の値は、0およびnum_ref_pic_lists_in_sps[ i ] - 1を含んで0からnum_ref_pic_lists_in_sps[ i ] - 1までの範囲内にある。ref_pic_list_sps_flag[ i ]が1に等しく、num_ref_pic_lists_in_sps[ i ]が1に等しいとき、ref_pic_list_idx[ i ]の値は、0に等しいと推測される。ref_pic_list_sps_flag[ i ]が1に等しく、rpl1_idx_present_flagが0に等しいとき、ref_pic_list_idx[ 1 ]の値は、ref_pic_list_idx[ 0 ]に等しいと推測される。
【0101】
変数RplsIdx[ i ]が、以下のように導出される。
RplsIdx[ i ] = ref_pic_list_sps_flag[ i ] ? ref_pic_list_idx[ i ] :
num_ref_pic_lists_in_sps[ i ] (7-40)
slice_poc_lsb_lt[ i ][ j ]は、ピクチャ順序カウントの値を第iの参照ピクチャリストの第jのLTRPエントリのMaxPicOrderCntLsbで割った余りを指定する。slice_poc_lsb_lt[ i ][ j ]シンタックス要素の長さは、log2_max_pic_order_cnt_lsb_minus4 + 4ビットである。
【0102】
変数PocLsbLt[ i ][ j ]が、以下のように導出される。
PocLsbLt[ i ][ j ] = ltrp_in_slice_header_flag[ i ][ RplsIdx[ i ] ] ? (7-41)
slice_poc_lsb_lt[ i ][ j ] : rpls_poc_lsb_lt[ listIdx ][ RplsIdx[ i ] ][ j ]
delta_poc_msb_present_flag[ i ][ j ]は、delta_poc_msb_cycle_lt[ i ][ j ]が存在することを指定するために1に等しいように設定され得る。delta_poc_msb_present_flag[ i ][ j ]は、delta_poc_msb_cycle_lt[ i ][ j ]が存在しないことを指定するために0に等しいように設定され得る。prevTid0Picが、0に等しいTemporalIdを有し、ランダムアクセススキップリーディング(RASL: random access skipped leading)またはランダムアクセス復号可能リーディング(RADL: random access decodable leading)ピクチャではない、復号順で前のピクチャであるものとする。setOfPrevPocValsが、以下、すなわち、prevTid0PicのPicOrderCntVal、prevTid0PicのRefPicList[ 0 ]のエントリおよびRefPicList[ 1 ]のエントリによって参照される各ピクチャのPicOrderCntVal、ならびに復号順でprevTid0Picの後に続き、復号順で現在のピクチャの前にある各ピクチャのPicOrderCntValを含むセットであるものとする。値をMaxPicOrderCntLsbで割った余りがPocLsbLt[ i ][ j ]に等しいsetOfPrevPocVals内の2つ以上の値が存在するとき、delta_poc_msb_present_flag[ i ][ j ]の値は、1に等しいべきである。
【0103】
delta_poc_msb_cycle_lt[ i ][ j ]は、変数FullPocLt[ i ][ j ]の値を以下の通りに指定する。
if( j == 0 )
deltaMsbCycle[ i ][ j ] = delta_poc_msb_cycle_lt[ i ][ j ]
else (7-42)
deltaMsbCycle[ i ][ j ] = delta_poc_msb_cycle_lt[ i ][ j ] + deltaMsbCycle[ i ][ j - 1 ]
FullPocLt[ i ][ RplsIdx[ i ] ][ j ] = PicOrderCntVal - deltaMsbCycle[ i ][ j ] * MaxPicOrderCntLsb - ( PicOrderCntVal & ( MaxPicOrderCntLsb - 1 ) ) + PocLsbLt[ i ][ j ]
【0104】
delta_poc_msb_cycle_lt[ i ][ j ]の値は、0および2(32 - log2_max_pic_order_cnt_lsb_minus4 - 4)を含んで0から2(32 - log2_max_pic_order_cnt_lsb_minus4 - 4)までの範囲内にあるべきである。存在しないとき、delta_poc_msb_cycle_lt[ i ][ j ]の値は、0に等しいと推測される。num_ref_idx_active_override_flagは、シンタックス要素num_ref_idx_active_minus1[ 0 ]がPおよびBスライスについて存在することと、シンタックス要素num_ref_idx_active_minus1[ 1 ]がBスライスについて存在することとを指定するために1に等しいように設定され得る。num_ref_idx_active_override_flagは、シンタックス要素num_ref_idx_active_minus1[ 0 ]およびnum_ref_idx_active_minus1[ 1 ]が存在しないことを指定するために0に等しいように設定され得る。存在しないとき、num_ref_idx_active_override_flagの値は、1に等しいと推測される。num_ref_idx_active _minus1[ i ]は、変数NumRefIdxActive[ i ]の導出のために使用される。num_ref_idx_active_minus1[ i ]の値は、0および14を含んで0から14までの範囲内にありうる。0または1に等しいiについて、現在のスライスがBスライスであり、num_ref_idx_active_override_flagが1に等しく、num_ref_idx_active_minus1[ i ]が存在しないとき、num_ref_idx_active_minus1[ i ]は、0に等しいと推測される。現在のスライスがPスライスであり、num_ref_idx_active_override_flagが1に等しく、num_ref_idx_active_minus1[ 0 ]が存在しないとき、num_ref_idx_active_minus1[ 0 ]は、0に等しいと推測される。
【0105】
変数NumRefIdxActive[ i ]は、以下の通りに導出される。
for( i = 0; i < 2; i++ ) {
if( slice_type == B || ( slice_type == P && i == 0 ) ) {
if( num_ref_idx_active_override_flag )
NumRefIdxActive[ i ] = num_ref_idx_active_minus1[ i ] + 1 (7-43)
else {
if( num_ref_entries[ i ][ RplsIdx[ i ] ] >= num_ref_idx_default_active_minus1[ i ] + 1 )
NumRefIdxActive[ i ] = num_ref_idx_default_active_minus1[ i ] + 1
else
NumRefIdxActive[ i ] = num_ref_entries[ i ][ RplsIdx[ i ] ]
}
} else // slice_type == I || ( slice_type == P && i == 1 )
NumRefIdxActive[ i ] = 0
}
【0106】
NumRefIdxActive[ i ] - 1の値は、スライスを復号するために使用され得る参照ピクチャリストiについての最大の参照インデックスを指定する。NumRefIdxActive[ i ]の値が0に等しいとき、参照ピクチャリストiについての参照インデックスは、スライスを復号するために使用されない可能性がある。現在の復号されたピクチャが現在のスライスの唯一の参照ピクチャであることを指定する変数CurrPicIsOnlyRefは、以下の通りに導出される。
CurrPicIsOnlyRef = sps_cpr_enabled_flag && ( slice_type == P ) && (7-44)
( num_ref_idx_active_minus1[ 0 ] == 0 )
【0107】
例示的な参照ピクチャリスト構造のセマンティクスは、以下の通りである。ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造は、SPS内またはスライスヘッダ内に存在する可能性がある。シンタックス構造がスライスヘッダに含まれるのかまたはSPSに含まれるのかに応じて、以下のことが適用される。スライスヘッダ内に存在する場合、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造は、現在のピクチャ(たとえば、スライスを含むピクチャ)の参照ピクチャリストのlistIdxを指定する。そうでない(たとえば、SPS内に存在する)場合、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造は、参照ピクチャリストlistIdxの候補を指定し、セマンティクスにおける現在のピクチャという用語は、1)SPSに含まれるref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のリストへのインデックスに等しいref_pic_list_idx[ listIdx ]を含む1つまたは複数のスライスを有し、2)SPSをアクティブなSPSとして有するCVS内にある各ピクチャを指す。
【0108】
num_ref_entries[ listIdx ][ rplsIdx ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のエントリの数を指定する。num_ref_entries[ listIdx ][ rplsIdx ]の値は、0およびsps_max_dec_pic_buffering_minus1 + 14を含んで0からsps_max_dec_pic_buffering_minus1 + 14までの範囲内にあるべきである。ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のLTRPエントリのPOC LSBがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造内に存在することを指定するために0に等しいように設定され得る。ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のLTRPエントリのPOC LSBがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造内に存在しないことを指定するために1に等しいように設定され得る。st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の第iのエントリが短期参照ピクチャ(STRP)エントリであることを指定するために1に等しいように設定され得る。st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の第iのエントリがLTRPエントリであることを指定するために0に等しいように設定され得る。存在しないとき、st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]の値は、1に等しいと推測される。
【0109】
変数NumLtrpEntries[ listIdx ][ rplsIdx ]は、以下の通りに導出され得る。
for( i = 0, NumLtrpEntries[ listIdx ][ rplsIdx ] = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ )
if( !st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) (7-86)
NumLtrpEntries[ listIdx ][ rplsIdx ]++
【0110】
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]は、第iのエントリがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の最初のSTRPエントリであるとき、現在のピクチャのピクチャ順序カウントの値と第iのエントリによって参照されるピクチャのピクチャ順序カウントの値との間の絶対的な差を指定し、または第iのエントリがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のSTRPエントリであるが最初のSTRPエントリではないとき、第iのエントリによって参照されるピクチャのピクチャ順序カウントの値とref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の前のSTRPエントリによって参照されるピクチャのピクチャ順序カウントの値との間の絶対的な差を指定する。abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]の値は、0および215 - 1を含んで0から215 - 1までの範囲内にありうる。strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]は、シンタックス構造ref_pic_list_struct( listIdx, rplsIdx )の第iのエントリが0以上の値を有することを指定するために1に等しいように設定され得る。strp_entry_sign_flag[ listIdx ][ rplsIdx ]は、シンタックス構造ref_pic_list_struct( listIdx, rplsIdx )の第iのエントリが0未満の値を有することを指定するために0に等しいように設定され得る。存在しないとき、strp_entry_sign_flag[ i ][ j ]の値は、1に等しいと推測される。
【0111】
リストDeltaPocSt[ listIdx ][ rplsIdx ]は、以下の通りに導出される。
for( i = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ ) {
if( st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) { (7-87)
DeltaPocSt[ listIdx ][ rplsIdx ][ i ] = ( strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]) ?
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] : 0 - abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]
}
}
【0112】
rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ i ]は、ピクチャ順序カウントの値をref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の第iのエントリによって参照されるピクチャのMaxPicOrderCntLsbで割った余りを指定する。rpls_poc_lsb_lt[ listIdx ] [ rplsIdx ][ i ]シンタックス要素の長さは、log2_max_pic_order_cnt_lsb_minus4 + 4ビットである。
【0113】
ビデオ画像をコーディングするために、画像はまず区分化され、区分がビットストリームにコーディングされる。様々なピクチャ区分化方式が、利用可能である。たとえば、画像は、通常のスライス(regular slice)に、従属スライス(dependent slice)に、タイルに、および/または波面並列処理(WPP)によって区分化され得る。簡単にするために、HEVCは、ビデオコーディングのためにスライスをCTBのグループに区分化するときに通常のスライス、従属スライス、タイル、WPP、およびこれらの組合せのみが使用され得るようにエンコーダを制約する。このような区分化は、最大転送単位(MTU)のサイズマッチング、並列処理、および削減されたエンドツーエンドの遅延をサポートするために適用され得る。MTUは、単一のパケットで送信され得るデータの最大量を表す。パケットのペイロードがMTUを超えている場合、そのペイロードは、フラグメンテーションと称されるプロセスによって2つのパケットに分割される。
【0114】
単にスライスとも称される通常のスライスは、ループフィルタリング動作が原因のいくつかの依存関係があるにもかかわらず、同じピクチャ内の他の通常のスライスとは独立して再構築され得る画像の区分化された部分である。各通常のスライスは、送信のために独自のネットワーク抽象化レイヤ(NAL)ユニットにカプセル化される。さらに、スライスの境界をまたぐピクチャ内予測(イントラサンプル予測、動き情報予測、コーディングモード予測)およびエントロピーコーディングの依存関係は、独立した再構築をサポートするために無効化される可能性がある。このような独立した再構築は、並列化をサポートする。たとえば、通常のスライスに基づく並列化は、最小限のプロセッサ間またはコア間通信を使用する。しかし、各通常のスライスは独立しているので、各スライスは、別々のスライスヘッダに関連付けられる。通常のスライスの使用は、各スライスに関するスライスヘッダのビットコストが原因でおよびスライスの境界をまたぐ予測を欠くことが原因で多大なコーディングのオーバーヘッドを招き得る。さらに、通常のスライスは、MTUのサイズの要件に関するマッチングをサポートするために使用され得る。具体的には、通常のスライスが別個のNALユニットにカプセル化され、独立してコーディングされ得るので、各通常のスライスは、スライスを複数のパケットに分割することを避けるためにMTU方式のMTUよりも小さいべきである。したがって、並列化の目的およびMTUのサイズマッチングの目的は、ピクチャ内のスライスのレイアウトに矛盾する要求を課す可能性がある。
【0115】
従属スライスは、通常のスライスに似ているが、短縮されたスライスヘッダを有し、ピクチャ内予測を損なうことなく画像ツリーブロックの境界の区分化を可能にする。したがって、従属スライスは、通常のスライスが複数のNALユニットにフラグメンテーションされることを可能にし、これは、通常のスライスの一部が通常のスライス全体の符号化が完了する前に送出されることを可能にすることによって削減されたエンドツーエンドの遅延をもたらす。
【0116】
タイルは、タイルの列および行を生成する水平方向の境界および垂直方向の境界によって生成される画像の区分化された部分でありうる。タイルは、ラスタスキャン順(右から左および上から下)にコーディングされ得る。CTBのスキャン順は、タイル内に限られる。したがって、第1のタイル内のCTBは、次のタイル内のCTBに進む前にラスタスキャン順にコーディングされる。通常のスライスと同様に、タイルは、ピクチャ内予測の依存関係およびエントロピー復号の依存関係を損なう。しかし、タイルは、個々のNALユニットに含まれない可能性があり、したがって、タイルは、MTUのサイズマッチングのために使用されない可能性がある。各タイルは、1つのプロセッサ/コアによって処理されることができ、近傍タイルを復号する処理ユニット間でピクチャ内予測のために使用されるプロセッサ間/コア間通信は、(近傍タイルが同じスライス内にあるときに)共有されたスライスヘッダを運ぶことならびに再構築されたサンプルおよびメタデータのループフィルタリングに関連する共有を実行することに制限され得る。2つ以上のタイルがスライスに含まれるとき、スライスの最初のエントリポイントのオフセット以外の各タイルに関するエントリポイントのバイトオフセットが、スライスヘッダ内でシグナリングされ得る。各スライスおよびタイルについて、以下の条件、すなわち、1)スライス内のすべてのコーディングされたツリーブロックが同じタイルに属すること、および2)タイル内のすべてのコーディングされたツリーブロックが同じスライスに属することのうちの少なくとも1つが満たされるべきである。
【0117】
WPPにおいて、画像は、CTBの単一の行に区分化される。エントロピー復号および予測メカニズムは、他の行のCTBからのデータを使用しうる。CTBの行の並列的な復号によって、並列処理が可能にされる。たとえば、現在の行は、前の行と並列に復号され得る。しかし、現在の行の復号は、例によっては、1または2CTBだけ前の行の復号プロセスから遅らされる。この遅延は、現在のCTBがコーディングされる前に現在の行内の現在のCTBの上のCTBおよび右上のCTBに関連するデータが利用可能であることを保証する。この手法は、グラフィカルに表現されるとき、波面に見える。このずらされた開始は、最大で画像が含むCTBの行と同じ数のプロセッサ/コアまでの並列化を可能にする。ピクチャ内の近傍のツリーブロックの行の間のピクチャ内予測が許されるので、ピクチャ内予測を可能にするためのプロセッサ間/コア間通信は、多大になり得る。WPPの区分化は、NALユニットのサイズを確かに考慮する。したがって、WPPは、MTUのサイズマッチングをサポートしない。しかしながら、通常のスライスは、所望のMTUのサイズマッチングを実施するために、いくらかのコーディングのオーバーヘッドを伴って、WPPと併せて使用され得る。
【0118】
例において、ビデオコーディングシステムは、スライス、タイル、ブリック(brick)、およびWPPを用いて画像を区分化し得る。ピクチャは、1つまたは複数のタイルの行および1つまたは複数のタイルの列に分割され得る。タイルは、ピクチャの長方形の領域を包含するCTUのシーケンスでありうる。タイルは、1つまたは複数のブリックに分割されえ、ブリックの各々は、タイル内のいくつかのCTUの行を含む。複数のブリックに区分化されないタイルは、ブリックとも称されうる。タイルの純粋なサブセットであるブリックは、タイルと称されないことがある。スライスは、ピクチャのいくつかのタイルまたはタイルのいくつかのブリックを含み得る。ラスタスキャンスライスモードおよび長方形スライスモードを含むスライスの2つのモードが、サポートされ得る。ラスタスキャンスライスモードにおいて、スライスは、ピクチャのタイルのラスタスキャンのタイルのシーケンスを含む。長方形スライスモードにおいて、スライスは、ピクチャの長方形の領域を集合的に形成するピクチャのいくつかのブリックを含み得る。長方形スライス内のブリックは、スライスのブリックのラスタスキャンの順序になっている。single_tile_in_pic_flagは、ピクチャにただ1つのタイルが存在し、単一のタイルがブリックに分割されないことを指定するために1に等しいように設定され得る。entropy_coding_sync_enabled_flagは、WPPが用いられていることを指定するために1に等しいように設定され得る。
【0119】
例示的なピクチャパラメータセットのRBSPのシンタックスは、以下の通りである。
【0120】
【0121】
【0122】
【0123】
一般スライスヘッダのシンタックスの例は、以下の通りである。
【0124】
【0125】
例示的なピクチャパラメータセットのRBSPのセマンティクスは、以下の通りである。single_tile_in_pic_flagは、PPSを参照する各ピクチャ内のただ1つのタイルが存在することを指定するために1に等しいように設定され得る。single_tile_in_pic_flagは、PPSを参照する各ピクチャ内の2つ以上のタイルが存在することを指定するために0に等しいように設定され得る。タイル内にさらなるブリック分割がない場合、タイル全体が、ブリックと称されうる。ピクチャがさらなるブリック分割なしに単一のタイルのみを含むとき、ピクチャは、シングルブリック(single brick)と称されうる。ビットストリームの適合性(conformance)のために、single_tile_in_pic_flagの値は、CVS内でアクティブ化されるすべてのPPSについて同じであるべきである。
【0126】
uniform_tile_spacing_flagは、タイルの列の境界および同様にタイルの行の境界がピクチャに一様に分散され、シンタックス要素tile_cols_width_minus1およびtile_rows_height_minus1を使用してシグナリングされることを指定するために1に等しいように設定され得る。uniform_tile_spacing_flagは、タイルの列の境界および同様にタイルの行の境界がピクチャに一様に分散されることもされないこともあり、シンタックス要素num_tile_columns_minus1およびnum_tile_rows_minus1ならびにシンタックス要素のペアtile_column_width_minus1[ i ]およびtile_row_height_minus1[ i ]のリストを用いてシグナリングされることもされないこともあることを指定するために0に等しいように設定され得る。存在しない場合、uniform_tile_spacing_flagの値は、0に等しいと推測され得る。tile_cols_width_minus1に1を足した値は、uniform_tile_spacing_flagが1に等しいとき、CTBを単位としてピクチャの最も右のタイルの列を除くタイルの列の幅を指定する。tile_cols_width_minus1の値は、0およびPicWidthInCtbsY - 1を含んで0からPicWidthInCtbsY - 1までの範囲内にありうる。存在しないとき、tile_cols_width_minus1の値は、PicWidthInCtbsY - 1に等しいと推測される。
【0127】
tile_rows_height_minus1に1を足した値は、uniform_tile_spacing_flagが1に等しいとき、CTBを単位としてピクチャの一番下のタイルの行を除くタイルの行の高さを指定する。tile_rows_height_minus1の値は、0およびPicHeightInCtbsY - 1を含んで0からPicHeightInCtbsY - 1までの範囲内にある。存在しないとき、tile_rows_width_minus1の値は、PicHeightInCtbsY - 1に等しいと推測される。num_tile_columns_minus1に1を足した値は、uniform_tile_spacing_flagが0に等しいとき、ピクチャを区分化するタイルの列の数を指定する。num_tile_columns_minus1の値は、0およびPicWidthInCtbsY - 1を含んで0からPicWidthInCtbsY - 1までの範囲内にある。single_tile_in_pic_flagが1に等しい場合、num_tile_columns_minus1の値は、0に等しいと推測される。そうでない場合、uniform_tile_spacing_flagが1に等しいとき、num_tile_columns_minus1の値が推測される。num_tile_rows_minus1に1を足した値は、uniform_tile_spacing_flagが0に等しいとき、ピクチャを区分化するタイルの行の数を指定する。num_tile_rows_minus1の値は、0およびPicHeightInCtbsY - 1を含んで0からPicHeightInCtbsY - 1までの範囲内にある。single_tile_in_pic_flagが1に等しい場合、num_tile_rows_minus1の値は、0に等しいと推測される。そうでない場合、uniform_tile_spacing_flagが1に等しいとき、num_tile_rows_minus1の値が推測される。変数NumTilesInPicは、( num_tile_columns_minus1 + 1 ) * ( num_tile_rows_minus1 + 1 )に等しいように設定され得る。
【0128】
single_tile_in_pic_flagが0に等しいとき、NumTilesInPicは、1より大きいはずである。tile_column_width_minus1[ i ]に1を足した値は、CTBを単位として第iのタイルの列の幅を指定する。tile_row_height_minus1[ i ]に1を足した値は、CTBを単位として第iのタイルの行の高さを指定する。brick_splitting_present_flagは、PPSを参照するピクチャの1つまたは複数のタイルが2つ以上のブリックに分割され得ることを指定するために1に等しいように設定され得る。brick_splitting_present_flagは、PPSを参照するピクチャのタイルが2つ以上のブリックに分割されないことを指定するために0に等しいように設定され得る。brick_split_flag[ i ]は、第iのタイルが2つ以上のブリックに分割されることを指定するために1に等しいように設定され得る。brick_split_flag[ i ]は、第iのタイルが2つ以上のブリックに分割されないことを指定するために0に等しいように設定され得る。存在しないとき、brick_split_flag[ i ]の値は、0に等しいと推測される。
【0129】
uniform_brick_spacing_flag[ i ]は、ブリックの境界が第iのタイルに一様に分散され、シンタックス要素brick_height_minus1[ i ]を使用してシグナリングされることを指定するために1に等しいように設定され得る。uniform_brick_spacing_flag[ i ]は、ブリックの境界が第iのタイルに一様に分散される可能性があり、または一様に分散されない可能性があり、シンタックス要素num_brick_rows_minus1[ i ]およびシンタックス要素brick_row_height_minus1[ i ][ j ]のリストを使用してシグナリングされる可能性があり、またはシグナリングされない可能性があることを指定するために0に等しいように設定され得る。存在しないとき、uniform_brick_spacing_flag[ i ]の値は、1に等しいと推測される。brick_height_minus1[ i ]に1を足した値は、uniform_brick_spacing_flag[ i ]が1に等しいとき、CTBを単位として第iのタイル内の一番下のブリックを除くブリックの行の高さを指定する。存在するとき、brick_height_minus1の値は、0およびRowHeight[ i ] - 2を含んで0からRowHeight[ i ] - 2までの範囲内である。存在しないとき、brick_height_minus1[ i ]の値は、RowHeight[ i ] - 1に等しいと推測される。num_brick_rows_minus1[ i ]に1を足した値は、uniform_brick_spacing_flag[ i ]が0に等しいとき、第iのタイルを区分化するブリックの数を指定する。存在するとき、num_brick_rows_minus1[ i ]の値は、0およびRowHeight[ i ] - 1を含んで0からRowHeight[ i ] - 1までの範囲内にありうる。brick_split_flag[ i ]が0に等しい場合、num_brick_rows_minus1[ i ]の値は、0に等しいと推測される。そうでない場合、uniform_brick_spacing_flag[ i ]が1に等しいとき、num_brick_rows_minus1[ i ]の値が推測される。brick_row_height_minus1[ i ][ j ]に1を足した値は、uniform_tile_spacing_flagが0に等しいとき、CTBを単位として第iのタイル内の第jのブリックの高さを指定する。
【0130】
以下の変数が、導出されることが可能であり、uniform_tile_spacing_flagが1に等しいとき、num_tile_columns_minus1およびnum_tile_rows_minus1の値が推測され、0およびNumTilesInPic - 1を含んで0からNumTilesInPic - 1までの範囲の各iについて、uniform_brick_spacing_flag[ i ]が1に等しいとき、num_brick_rows_minus1[ i ]の値が、CTBラスタおよびブリックスキャン変換プロセス(CTB raster and brick scanning conversion process)によって推測される。導出され得る変数は、CTBを単位として第jのタイルの行の高さを指定する、0およびnum_tile_rows_minus1を含んで0からnum_tile_rows_minus1までの範囲のjに対するリストRowHeight[ j ]と、ピクチャのCTBのラスタスキャンにおけるCTBのアドレスからブリックのスキャンにおけるCTBのアドレスへの変換を指定する、0およびPicSizeInCtbsY - 1を含んで0からPicSizeInCtbsY - 1までの範囲のctbAddrRsに対するリストCtbAddrRsToBs[ ctbAddrRs ]と、ブリックのスキャンにおけるCTBのアドレスからピクチャのCTBのラスタスキャンにおけるCTBのアドレスへの変換を指定する、0およびPicSizeInCtbsY - 1を含んで0からPicSizeInCtbsY - 1までの範囲のctbAddrBsに対するリストCtbAddrBsToRs[ ctbAddrBs ]と、ブリックのスキャンにおけるCTBのアドレスからブリックIDへの変換を指定する、0およびPicSizeInCtbsY - 1を含んで0からPicSizeInCtbsY - 1までの範囲のctbAddrBsに対するリストBrickId[ ctbAddrBs ]と、ブリックインデックスからブリック内のCTUの数への変換を指定する、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲のbrickIdxに対するリストNumCtusInBrick[ brickIdx ]と、ブリックIDからブリック内の第1のCTBのブリックのスキャンにおけるCTBのアドレスへの変換を指定する、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲のbrickIdxに対するリストFirstCtbAddrBs[ brickIdx ]を含む。
【0131】
single_brick_per_slice_flagは、このPPSを参照する各スライスが1つのブリックを含むことを指定するために1に等しいように設定され得る。single_brick_per_slice_flagは、このPPSを参照するスライスが2つ以上のブリックを含み得ることを指定するために0に等しいように設定され得る。存在しないとき、single_brick_per_slice_flagの値は、1に等しいと推測される。rect_slice_flagは、各スライス内のブリックがラスタスキャン順になっており、スライス情報がPPS内でシグナリングされないことを指定するために0に等しいように設定され得る。rect_slice_flagは、各スライス内のブリックがピクチャの長方形領域をカバーし、スライス情報がPPS内でシグナリングされることを指定するために1に等しいように設定され得る。single_brick_per_slice_flagが1に等しいとき、rect_slice_flagは、1に等しいと推測される。num_slices_in_pic_minus1に1を足した値は、PPSを参照する各ピクチャ内のスライスの数を指定する。num_slices_in_pic_minus1の値は、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲内にありうる。存在せず、single_brick_per_slice_flagが1に等しいとき、num_slices_in_pic_minus1の値は、NumBricksInPic - 1に等しいと推測される。
【0132】
top_left_brick_idx[ i ]は、第iのスライスの左上の角にあるブリックのブリックインデックスを指定する。jに等しくない任意のiに対して、top_left_brick_idx[ i ]の値は、top_left_brick_idx[ j ]の値に等しくないべきである。存在しないとき、top_left_brick_idx[ i ]の値は、iに等しいと推測される。top_left_brick_idx[ i ]シンタックス要素の長さは、Ceil( Log2( NumBricksInPic )ビットである。bottom_right_brick_idx_delta[ i ]は、第iのスライスの右下の角にあるブリックのブリックインデックスとtop_left_brick_idx[ i ]との間の差を指定する。single_brick_per_slice_flagが1に等しいとき、bottom_right_brick_idx_delta[ i ]の値は、0に等しいと推測される。bottom_right_brick_idx_delta[ i ]シンタックス要素の長さは、Ceil( Log2( NumBricksInPic - top_left_brick_idx[ i ] ) )ビットである。
【0133】
ビットストリームの適合性は、スライスがいくつかの完全なタイルかまたは1つのタイルのサブセットのみかのどちらかを含むことを必要とし得る。第iのスライス内のブリックの数およびスライスへのブリックのマッピングを指定する変数NumBricksInSlice[ i ]およびBricksToSliceMap[ j ]は、以下の通りに導出され得る。
NumBricksInSlice[ i ] = 0
botRightBkIdx = top_left_brick_idx[ i ] + bottom_right_brick_idx_delta[ i ]
for( j = 0; j < NumBricksInPic; j++) {
if( BrickColBd[ j ] >= BrickColBd[ top_left_brick_idx[ i ] ] &&
BrickColBd[ j ] <= BrickColBd[ botRightBkIdx ] &&
BrickRowBd[ j ] >= BrickRowlBd[ top_left_brick_idx[ i ] ] && (7-34)
BrickRowBd[ j ] <= BrickColBd[ botRightBkIdx ] ) {
NumBricksInSlice[ i ]++
BricksToSliceMap[ j ] = i
}
}
【0134】
loop_filter_across_bricks_enabled_flagは、ループ内フィルタリング動作がPPSを参照するピクチャ内のブリックの境界を越えて実行され得ることを指定するために1に等しいように設定され得る。loop_filter_across_bricks_enabled_flagは、ループ内フィルタリング動作がPPSを参照するピクチャ内のブリックの境界を越えて実行されないことを指定するために0に等しいように設定され得る。ループ内フィルタリング動作は、デブロッキングフィルタ、サンプル適応オフセットフィルタ、および適応ループフィルタの動作を含む。存在しないとき、loop_filter_across_bricks_enabled_flagの値は、1に等しいと推測される。loop_filter_across_slices_enabled_flagは、ループ内フィルタリング動作がPPSを参照するピクチャ内のスライスの境界を越えて実行され得ることを指定するために1に等しいように設定され得る。loop_filter_across_slice_enabled_flagは、ループ内フィルタリング動作がPPSを参照するピクチャ内のスライスの境界を越えて実行されないことを指定するために0に等しいように設定され得る。ループ内フィルタリング動作は、デブロッキングフィルタ、サンプル適応オフセットフィルタ、および適応ループフィルタの動作を含む。存在しないとき、loop_filter_across_slices_enabled_flagの値は、0に等しいと推測される。
【0135】
signalled_slice_id_flagは、各スライスに関するスライスIDがシグナリングされることを指定するために1に等しいように設定され得る。signalled_slice_id_flagは、スライスIDがシグナリングされないことを指定するために0に等しいように設定され得る。rect_slice_flagが0に等しいとき、signalled_slice_id_flagの値は、0に等しいと推測される。signalled_slice_id_length_minus1に1を足した値は、スライスヘッダ内の、存在するときにはシンタックス要素slice_id[ i ]と、シンタックス要素slice_addressとを表すために使用されるビット数を指定する。signalled_slice_id_length_minus1は、0および15を含んで0から15までの範囲内にありうる。存在しないとき、signalled_slice_id_length_minus1の値は、Ceil( Log2( num_slices_in_pic_minus1 + 1 ) ) - 1に等しいと推測される。
【0136】
slice_id[ i ]は、第iのスライスのスライスIDを指定する。slice_id[ i ]シンタックス要素の長さは、signalled_slice_id_length_minus1 + 1ビットである。存在しないとき、slice_id[ i ]の値は、0およびnum_slices_in_pic_minus1を含んで0からnum_slices_in_pic_minus1までの範囲内の各iについてiに等しいと推測される。entropy_coding_sync_enabled_flagは、PPSを参照する各ピクチャの各ブリック内のCTBの行の最初のCTBを含むCTUを復号する前にコンテキスト変数(context variable)についての特定の同期プロセスが呼び出され、PPSを参照する各ピクチャの各ブリック内のCTBの行の最初のCTBを含むCTUを復号した後にコンテキスト変数についての特定の記憶プロセスが呼び出されることを指定するために1に等しいように設定され得る。entropy_coding_sync_enabled_flagは、PPSを参照する各ピクチャの各ブリック内のCTBの行の最初のCTBを含むCTUを復号する前にコンテキスト変数についての特定の同期プロセスが呼び出される必要がなく、PPSを参照する各ピクチャの各ブリック内のCTBの行の最初のCTBを含むCTUを復号した後にコンテキスト変数についての特定の記憶プロセスが呼び出される必要がないことを指定するために0に等しいように設定され得る。ビットストリームの適合性は、entropy_coding_sync_enabled_flagの値がCVS内でアクティブ化されるすべてのPPSについて同じであることを必要とし得る。
【0137】
一般スライスヘッダのセマンティクスの例は、以下の通りである。slice_addressは、スライスのスライスアドレスを指定する。存在しないとき、slice_addressの値は、0に等しいと推測される。rect_slice_flagが0に等しい場合、以下が適用される。スライスアドレスは、ブリックIDである。slice_addressの長さは、Ceil( Log2 ( NumBricksInPic ) )ビットである。slice_addressの値は、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲内にありうる。そうでない(rect_slice_flagが1に等しい)場合、以下が適用される。スライスアドレスは、スライスのスライスIDである。slice_addressの長さは、signalled_slice_id_length_minus1 + 1ビットである。signalled_slice_id_flagが0に等しい場合、slice_addressの値は、0およびnum_slices_in_pic_minus1を含んで0からnum_slices_in_pic_minus1までの範囲内にある。そうでない場合、slice_addressの値は、0および2( signalled_slice_id_length_minus1 + 1 ) - 1を含んで0から2( signalled_slice_id_length_minus1 + 1 ) - 1までの範囲内にある。
【0138】
ビットストリームの適合性は、以下の制約が適用されることを必要とし得る。slice_addressの値は、同じコーディングされたピクチャのいかなる他のコーディングされたスライスのNALユニットのslice_addressの値とも等しくないことがある。ピクチャのスライスは、それらのスライスのslice_addressの値の昇順になっていないことがある。ピクチャのスライスの形状は、各ブリックが、復号されるときに、ピクチャの境界を含むかまたは既に復号されたブリックの境界を含むその左の境界全体および上の境界全体を有するようなものであることがある。num_bricks_in_slice_minus1は、存在するとき、スライス内のブリックの数から1を引いた値を指定する。num_bricks_in_slice_minus1の値は、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲内にありうる。rect_slice_flagが0に等しく、single_brick_per_slice_flagが1に等しいとき、num_bricks_in_slice_minus1の値は、0に等しいと推測される。
【0139】
現在のスライス内のブリックの数を指定する変数NumBricksInCurrSliceおよび現在のスライスの第iのブリックのブリックインデックスを指定するSliceBrickIdx[ i ]は、以下の通りに導出され得る。
if( rect_slice_flag ) {
sliceIdx = 0
while( slice_address != rect_slice_id[ sliceIdx ] )
sliceIdx++
NumBricksInCurrSlice = NumBricksInSlice[ sliceIdx ]
brickIdx = top_left_brick_idx[ sliceIdx ]
botBrickIdx = brickIdx + bottom_right_brick_idx_delta[ brickIdx ]
for( bIdx = 0; brickIdx <= botBrickIdx; brickIdx++ ) (7-38)
if( BricksToSliceMap[ brickIdx ] == sliceIdx )
SliceBrickIdx[ bIdx++ ] = brickIdx
} else {
NumBricksInCurrSlice = num_bricks_in_slice_minus1 + 1
SliceBrickIdx[ 0 ] = slice_address
for( i = 1; i < NumBricksInCurrSlice; i++ )
SliceBrickIdx[ i ] = SliceBrickIdx[ i - 1 ] + 1
}
【0140】
num_entry_point_offsetsは、変数NumEntryPointsを指定するために使用され、変数NumEntryPointsは、以下の通り、現在のスライス内のエントリポイントの数を指定する。
NumEntryPoints = entropy_coding_sync_enabled_flag ? num_entry_point_offsets :
NumBricksInCurrSlice - 1 (7-60)
【0141】
offset_len_minus1に1を足した値は、entry_point_offset_minus1[ i ]シンタックス要素の長さをビット数で指定する。offset_len_minus1の値は、0および31を含んで0から31までの範囲内にありうる。entry_point_offset_minus1[ i ]に1を足した値は、第iのエントリポイントのオフセットをバイト数で指定し、offset_len_minus1足す1ビットによって表される。スライスヘッダに続くスライスデータは、0およびNumEntryPointsを含んで0からNumEntryPointsまでの範囲のサブセットインデックス値を有するNumEntryPoints + 1個のサブセットを含む。スライスデータの最初のバイトは、バイト0と考えられる。存在するとき、コーディングされたスライスのNALユニットのスライスデータの部分に現れるエミュレーション防止バイト(emulation prevention byte)が、サブセットを特定する目的でスライスデータの一部とみなされる。サブセット0は、コーディングされたスライスデータの、バイト0およびバイトentry_point_offset_minus1[ 0 ]を含んでバイト0からバイトentry_point_offset_minus1[ 0 ]までを含み、kが1およびNumEntryPoints - 1を含んで1からNumEntryPoints - 1までの範囲内にあるサブセットkは、コーディングされたスライスデータの、バイトfirstByte[ k ]およびバイトlastByte[ k ]を含んでバイトfirstByte[ k ]からバイトlastByte[ k ]までを含み、firstByte[ k ]およびバイトlastByte[ k ]は、以下のように定義される。
【0142】
【0143】
lastByte[ k ]=firstByte[ k ] + entry_point_offset_minus1[ k ] (7-61)
(NumEntryPointsに等しいサブセットインデックスを有する)最後のサブセットは、コーディングされたスライスデータの残りのバイトを含む。
【0144】
entropy_coding_sync_enabled_flagが0に等しいとき、各サブセットは、同じブリック内にあるスライス内のすべてのCTUのすべてのコーディングされたビットを含む可能性があり、サブセットの数(たとえば、NumEntryPointsの値 + 1)は、スライス内のブリックの数に等しいべきである。entropy_coding_sync_enabled_flagが1に等しいとき、kが0およびNumEntryPointsを含んで0からNumEntryPointsまでの範囲内にある各サブセットkは、ブリックの中のCTUの行内のすべてのCTUのすべてのコーディングされたビットを含むことがあり、サブセットの数(たとえば、NumEntryPointsの値 + 1)は、スライス内のブリックに固有のルマCTUの行の総数に等しいことがある。
【0145】
上述の例は、1つまたは複数の問題を含み得る。たとえば、ref_pic_list_struct( )内のシンタックス要素ltrp_in_slice_header_flagは、long_term_ref_pics_flagが1に等しいことが条件とされ得る。その結果、long_term_ref_pics_flagが1に等しいとき、このフラグは、数が多くなり得る候補参照ピクチャリスト構造の各々に存在する。これは、long_term_ref_pics_flagが1に等しいとき、大きなSPSをもたらし得る。他の例において、シンタックス要素num_ref_idx_active_override_flagに関する条件と対応する推測との組合せが、問題となり得る。たとえば、num_ref_idx_active_override_flagの値は、Iスライスについて1に等しいことがあり、その結果、シンタックス要素num_ref_idx_active_minus1[ 0 ]が、num_ref_entries[ 0 ][ RplsIdx[ 0 ] ]が1よりも大きいIスライスについてシグナリングされることがあり、これ必要でない。他の例においては、WPPが使用されているとき(たとえば、entropy_coding_sync_enabled_flagが1に等しいとき)、シンタックス要素num_entry_point_offsetsが、変数NumEntryPointsの導出のためにシグナリングされ得る。しかし、NumEntryPointsは、このようなシグナリングなしに導出され得る。
【0146】
概して、本開示は、参照ピクチャリストのシグナリングの改善と、WPPが使用されているときのエントリポイントのシグナリングに関する改善とを含む、ビデオコーディングの改善のための技術を説明する。技術の説明は、開発中のVVCに基づくが、他のビデオ/メディアコーデック仕様にも当てはまりうる。
【0147】
上述の問題のうちの1つまたは複数は、以下のように解決され得る。例示的な態様において、フラグがSPSに含められる、ビデオのビットストリームを復号するための方法が開示される。フラグは、参照ピクチャリスト構造の長期参照ピクチャ(LTRP)エントリのPOC LSBがスライスヘッダ内または参照ピクチャリスト構造内に存在するかどうかを指定する。たとえば、フラグは、ltrp_in_slice_header_flagでありうる。他の例示的な態様において、ビットストリームが、参照ピクチャリストのアクティブなエントリの数が明示的にシグナリングされるかどうかを指定するフラグを含み、フラグが存在しないとき、フラグの値が、スライスがIスライスであるときは0に等しいと推測され、スライスがBまたはPスライスであるときは1に等しいと推測される、ビデオのビットストリームを復号するための方法が開示される。たとえば、フラグは、num_ref_idx_active_override_flagである可能性がある。他の例示的な態様において、ビットストリームがピクチャ内の複数のタイルを含み、波面並列処理機能が適用され、スライス内のエントリポイントの数が明示的にシグナリングされる代わりに推測される、ビデオのビットストリームを復号するための方法が開示される。たとえば、エントリポイントの数は、スライスに含まれるすべてのブリック内のCTUの行の数の総和であると推測され得る。さらに他の例において、エントリポイントの数は、変数NumEntryPointsによって表され得る。
【0148】
例示的なシーケンスパラメータセットのRBSPのシンタックスは、以下の通りである。
【0149】
【0150】
一般スライスヘッダのシンタックスの例は、以下の通りである。
【0151】
【0152】
【0153】
参照ピクチャリスト構造のシンタックス
【0154】
【0155】
例示的なシーケンスパラメータセットのRBSPのセマンティクスは、以下の通りである。long_term_ref_pics_flagは、LTRPがCVS内のいかなるコーディングされるピクチャのインター予測にも使用されないことを指定するために0に等しいように設定され得る。long_term_ref_pics_flagは、LTRPがCVS内の1つまたは複数のコーディングされるピクチャのインター予測のために使用されうることを指定するために1に等しいように設定され得る。ltrp_in_slice_header_flagは、各ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のLTRPエントリのPOC LSBがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造内に存在することを指定するために0に等しいように設定され得る。ltrp_in_slice_header_flagは、各ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のLTRPエントリのPOC LSBがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造内に存在しないことを指定するために1に等しいように設定され得る。
【0156】
一般スライスヘッダのセマンティクスの例は、以下の通りである。slice_poc_lsb_lt[ i ][ j ]は、ピクチャ順序カウントの値を第iの参照ピクチャリストの第jのLTRPエントリのMaxPicOrderCntLsbで割った余りを指定する。slice_poc_lsb_lt[ i ][ j ]シンタックス要素の長さは、log2_max_pic_order_cnt_lsb_minus4 + 4ビットである可能性がある。変数PocLsbLt[ i ][ j ]が、以下のように導出され得る。
PocLsbLt[ i ][ j ] = ltrp_in_slice_header_flag ? (7-41)
slice_poc_lsb_lt[ i ][ j ] : rpls_poc_lsb_lt[ listIdx ][ RplsIdx[ i ] ][ j ]
num_ref_idx_active_override_flagは、シンタックス要素num_ref_idx_active_minus1[ 0 ]がPおよびBスライスについて存在することと、シンタックス要素num_ref_idx_active_minus1[ 1 ]がBスライスについて存在することとを指定するために1に等しい可能性がある。num_ref_idx_active_override_flagは、シンタックス要素num_ref_idx_active_minus1[ 0 ]およびnum_ref_idx_active_minus1[ 1 ]が存在しないことを指定するために0に等しいように設定され得る。存在しないとき、num_ref_idx_active_override_flagの値は、以下のように推測され得る。slice_typeがBまたはPに等しい場合、num_ref_idx_active_override_flagの値は、1に等しいと推測され得る。そうでない(slice_typeがIに等しい)場合、num_ref_idx_active_override_flagの値は、0に等しいと推測され得る。
【0157】
例示的な参照ピクチャリスト構造のセマンティクスは、以下の通りである。num_ref_entries[ listIdx ][ rplsIdx ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のエントリの数を指定し得る。num_ref_entries[ listIdx ][ rplsIdx ]の値は、0およびsps_max_dec_pic_buffering_minus1 + 14を含んで0からsps_max_dec_pic_buffering_minus1 + 14までの範囲内にありうる。
【0158】
一般スライスヘッダのシンタックスの他の例は、以下の通りである。
【0159】
【0160】
一般スライスヘッダのセマンティクスの例は、以下の通りである。現在のスライス内のエントリポイントの数を指定する変数NumEntryPointsは、以下の通りに導出され得る。
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ ) (7-60)
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice - 1
}
offset_len_minus1に1を足した値は、entry_point_offset_minus1[ i ]シンタックス要素の長さをビット数で指定する。offset_len_minus1の値は、0および31を含んで0から31までの範囲内にありうる。
【0161】
図7は、例示的なビデオコーディングデバイス700の概略図である。ビデオコーディングデバイス700は、本明細書において説明されるように開示された例/実施形態を実装するのに好適である。ビデオコーディングデバイス700は、ダウンストリームポート720、アップストリームポート750、ならびに/またはネットワークを介して上流におよび/もしくは下流にデータを伝達するための送信器および/もしくは受信器を含むトランシーバユニット(Tx/Rx)710を含む。ビデオコーディングデバイス700は、データを処理するための論理ユニットおよび/または中央演算処理装置(CPU)を含むプロセッサ730と、データを記憶するためのメモリ732とをさらに含む。ビデオコーディングデバイス700は、電気、光、またはワイヤレス通信ネットワークを介したデータの通信のためにアップストリームポート750および/またはダウンストリームポート720に結合された電気、光-電気(OE)構成要素、電気-光(EO)構成要素、および/またはワイヤレス通信構成要素も含み得る。ビデオコーディングデバイス700は、ユーザにおよびユーザからデータを伝達するための入力および/または出力(I/O)デバイス760も含み得る。I/Oデバイス760は、ビデオデータを表示するためのディスプレイ、オーディオデータを出力するためのスピーカなどの出力デバイスを含み得る。I/Oデバイス760は、キーボード、マウス、トラックボールなどの入力デバイス、および/またはこのような出力デバイスとインタラクションするための対応するインターフェースも含み得る。
【0162】
プロセッサ730は、ハードウェアおよびソフトウェアによって実装される。プロセッサ730は、1つまたは複数のCPUチップ、コア(たとえば、マルチコアプロセッサとして)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、およびデジタル信号プロセッサ(DSP)として実装され得る。プロセッサ730は、ダウンストリームポート720、Tx/Rx 710、アップストリームポート750、およびメモリ732と通信する。プロセッサ730は、コーディングモジュール714を含む。コーディングモジュール714は、WPP 500および/またはビットストリーム600を含み得る、方法100、800、および900などの本明細書において説明される開示される実施形態を実装する。コーディングモジュール714は、本明細書において説明される任意の他の方法/メカニズムも実装し得る。さらに、コーディングモジュール714は、コーデックシステム200、エンコーダ300、および/またはデコーダ400を実装し得る。たとえば、コーディングモジュール714は、ビットストリームのスライスヘッダ内でnum_entry_point_offsetsパラメータを受信することなくNumEntryPoints 518の値を決定することができる。したがって、コーディングモジュール714は、ビデオデータをコーディングするときにビデオコーディングデバイス700に追加的な機能および/またはコーディングの効率を提供させる。したがって、コーディングモジュール714は、ビデオコーディングデバイス700の機能性を高め、ビデオコーディング技術に固有の問題に対処する。さらに、コーディングモジュール714は、異なる状態へのビデオコーディングデバイス700の転換をもたらす。代替的に、コーディングモジュール714は、メモリ732に記憶され、プロセッサ730によって実行される命令として(たとえば、非一時的媒体に記憶されたコンピュータプログラム製品)として実装され得る。
【0163】
メモリ732は、ディスク、テープドライブ、ソリッドステートドライブ、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、フラッシュメモリ、3値連想メモリ(TCAM: ternary content-addressable memory)、スタティックランダムアクセスメモリ(SRAM)などの1つまたは複数のメモリの種類を含む。メモリ732は、プログラムが実行するために選択されるときにこのようなプログラムを記憶するためならびにプログラムの実行中に読まれる命令およびデータを記憶するためのオーバーフローデータストレージデバイス(over-flow data storage device)として使用され得る。
【0164】
図8は、ビデオシーケンス内のスライスに関するNumEntryPointsをシグナリングすることなくWPP 500を用いて符号化されたビットストリーム600などのビットストリームにビデオシーケンスを符号化する例示的な方法800の流れ図である。方法800は、方法100を実行するときにコーデックシステム200、エンコーダ300、および/またはビデオコーディングデバイス700などのエンコーダによって使用され得る。
【0165】
方法800は、エンコーダが複数のピクチャを含むビデオシーケンスを受信し、たとえば、ユーザ入力に基づいてそのビデオシーケンスをビットストリームに符号化すると決定するときに開始し得る。ステップ801において、エンコーダは、スライスを含むピクチャをビットストリームに符号化し得る。エンコーダは、ピクチャおよび/またはスライスが他のピクチャおよび/またはスライスのためのコーディングされた参照ピクチャおよび/または参照スライスとしてそれぞれ使用されるべきであると決定することもできる。このピクチャ/スライスは、明瞭にする目的で、以下、現在のピクチャ/現在のスライスと称される。参照ピクチャが参照ピクチャとして使用されるべきであると決定すると、参照ピクチャは、復号のためにHRDに転送され得る。エンコーダは、スライスヘッダをビットストリームに符号化し得ることに留意されたい。例において、(たとえば、参照スライスおよび/または現在のスライスに関する)スライスヘッダは、スライス内のエントリポイントのオフセットの数に対応する値を含まない。たとえば、スライスヘッダは、num_entry_point_offsetsパラメータを含まない。ステップ803において、エンコーダのHRDは、ビットストリームかまたはメモリかのどちらかからコーディングされた参照ピクチャの参照スライスを取得する。
【0166】
ステップ805において、エンコーダのHRDは、参照スライスのサイズに基づいてNumEntryPointsを参照スライスに導出する。たとえば、NumEntryPointsは、参照スライスがWPPによってコーディングされるときに導出され得る。例において、NumEntryPointsは、参照スライス内の行のサイズに基づいてさらに導出され得る。例において、NumEntryPointsは、参照スライス内の列のサイズに基づいてさらに導出され得る。例において、NumEntryPointsは、参照スライス内のCTUの数に基づいてさらに導出され得る。例において、NumEntryPointsは、CTUのアドレスなどの参照スライス内のアドレスに基づいてさらに導出され得る。そして、エンコーダのHRDは、NumEntryPointsに基づいて参照スライス内のコーディングされたデータのサブセットに関するオフセットを決定することができる。たとえば、HRDは、オフセットの配列を取得し得る。ついで、HRDは、NumEntryPointsに基づいて配列からいくつかのオフセットを取得することができる。例において、サブセットは、CTUの行である。したがって、取得されたオフセットは、スライス内の各CTUの行についてのエントリポイントを示し得る。
【0167】
たとえば、NumEntryPointsは、以下のように導出され得る。
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice - 1
}
!entropy_coding_sync_enabled_flagは、WPP 500が用いられていないことを示し、NumBricksInCurrSliceは、スライス501内のタイルの数であり、numBrickSpecificCtuRowsInSliceは、スライス501内のCTUの行521~525の数であり、BrickHeight[ SliceBrickIdx[ i ] ]は、CTUの行521~525の高さ(およびしたがってCTUの列516の高さ)である。
【0168】
ステップ807において、エンコーダのHRDは、参照スライス内のコーディングされたデータのサブセットに関するオフセットに基づいてコーディングされた参照ピクチャの参照スライスを復号し得る。たとえば、HRDは、対応するオフセットによって示されたメモリまたはビットストリーム内のビットから始まる各CTUの行に関するデータを取得し得る。ついで、HRDは、取得されたデータに基づいて参照スライスのCTUの各々を復号し得る。
【0169】
ステップ809において、エンコーダは、たとえば、インター予測を使用することによって参照スライスに基づいて現在のスライスをビットストリームに符号化し得る。また、エンコーダは、ステップ811において、デコーダに伝達するためのビットストリームを記憶し得る。
【0170】
図9は、NumEntryPointsがWPP 500を用いて符号化されたビットストリーム600などのビットストリームに含まれないときにビデオシーケンスを復号するためにNumEntryPointsを導出する例示的な方法900の流れ図である。方法900は、方法100を実行しているときにコーデックシステム200、デコーダ400、および/またはビデオコーディングデバイス700などのデコーダによって用いられ得る。
【0171】
方法900は、たとえば、方法800の結果としてビデオシーケンスを表すコーディングされたデータのビットストリームをデコーダが受信し始めるときに開始し得る。ステップ901において、デコーダは、スライスを含むビットストリームを受信する。たとえば、スライスは、WPP 500によってコーディングされたスライス501である可能性がある。ビットストリームは、スライスに関連付けられたスライスヘッダも含む。例において、スライスヘッダは、スライス内のエントリポイントに対応する値を含まない。たとえば、スライスヘッダは、num_entry_point_offsetsパラメータを含まない。
【0172】
ステップ903において、デコーダは、スライスのサイズに基づいてNumEntryPointsをスライスに導出する。たとえば、NumEntryPointsは、スライスがWPPによってコーディングされるときに導出され得る。例において、NumEntryPointsは、スライス内の行のサイズに基づいてさらに導出され得る。例において、NumEntryPointsは、スライス内の列のサイズに基づいてさらに導出され得る。例において、NumEntryPointsは、スライス内のCTUの数に基づいてさらに導出され得る。例において、NumEntryPointsは、CTUのアドレスなどのスライス内のアドレスに基づいてさらに導出され得る。
【0173】
たとえば、NumEntryPointsは、以下のように導出され得る。
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice - 1
}
ここで、!entropy_coding_sync_enabled_flagは、WPP 500が用いられていないことを示し、NumBricksInCurrSliceは、スライス501内のタイルの数であり、numBrickSpecificCtuRowsInSliceは、スライス501内のCTUの行521~525の数であり、BrickHeight[ SliceBrickIdx[ i ] ]は、CTUの行521~525の高さ(したがってCTUの列516の高さ)である。
【0174】
ステップ905において、デコーダは、ステップ903において導出されたNumEntryPointsに基づいてスライスに含まれるコーディングされたスライスデータのサブセットについてのオフセットを決定し得る。たとえば、デコーダは、オフセットの配列を取得し得る。ついで、デコーダは、ステップ903において導出されたNumEntryPointsに基づいて配列からいくつかのオフセットを取得することができる。たとえば、コーディングされたスライスデータのオフセットは、それぞれ、サブセットインデックス値に関連付けられる可能性があり、このような値は、0からNumEntryPointsまでの範囲にあり得る。そして、デコーダは、NumEntryPointsが到達されるまで、対応するサブセットインデックス値の各オフセットを反復的に取得し得る。例において、サブセットは、CTUの行である。したがって、取得されたオフセットは、スライス内の各CTUの行についてのエントリポイントを示し得る。
【0175】
ステップ907において、デコーダは、コーディングされたスライスデータのサブセットについてのオフセットに基づいてスライスを復号する。たとえば、デコーダは、対応するオフセットによって示されたビットストリーム内のビットから始まる各CTUの行についてのデータを取得し得る。ついで、デコーダは、取得されたデータに基づいてスライスのCTUの各々を復号し得る。そして、デコーダは、ステップ909において、復号されたビデオシーケンスの一部として表示するためにスライスを転送し得る。
【0176】
図10は、NumEntryPointsをシグナリングすることなくWPP 500によってコーディングされたビットストリーム600などのビットストリームにビデオシーケンスをコーディングするための例示的なシステム1000の概略図である。システム1000は、コーデックシステム200、エンコーダ300、デコーダ400、および/またはビデオコーディングデバイス700などのエンコーダおよびデコーダによって実装され得る。さらに、システム1000は、方法100、800、および/または900を実施するときに使用され得る。
【0177】
システム1000は、ビデオエンコーダ1002を含む。ビデオエンコーダ1002は、コーディングされた参照ピクチャの参照スライスを取得するための取得モジュール1001を含む。ビデオエンコーダ1002は、参照スライスのサイズに基づいてNumEntryPointsを参照スライスに導出するための導出モジュール1003をさらに含む。ビデオエンコーダ1002は、NumEntryPointsに基づいて参照スライス内のコーディングされたデータのサブセットについてのオフセットを決定するための決定モジュール1004をさらに含む。ビデオエンコーダ1002は、参照スライス内のコーディングされたデータのサブセットについてのオフセットに基づいてコーディングされた参照ピクチャの参照スライスを復号するためのコーディングモジュール1005をさらに含む。さらに、コーディングモジュール1005は、参照スライスに基づいて現在のスライスをビットストリームに符号化するためのものである。ビデオエンコーダ1002は、デコーダに伝達するためのビットストリームを記憶するための記憶モジュール1006をさらに含む。ビデオエンコーダ1002は、ビットストリームをビデオデコーダ1010に送信するための送信モジュール1007をさらに含む。ビデオエンコーダ1002は、方法800のステップのいずれかを行うようにさらに構成され得る。
【0178】
システム1000は、ビデオデコーダ1010も含む。ビデオデコーダ1010は、スライスを含むビットストリームを受信するための受信モジュール1011を含む。ビデオデコーダ1010は、スライスのサイズに基づいてNumEntryPointsをスライスに導出するための決定モジュール1013をさらに含む。ビデオデコーダ1010は、0からNumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するための決定モジュール1015をさらに含む。ビデオデコーダ1010は、スライス内のコーディングされたデータのサブセットについてのオフセットに基づいてスライスを復号するための復号モジュール1017をさらに含む。ビデオデコーダ1010は、復号されたビデオシーケンスの一部として表示するためのスライスを転送するための転送モジュール1019をさらに含む。ビデオデコーダ1010は、方法900のステップのいずれかを行うようにさらに構成され得る。
【0179】
第1の構成要素は、第1の構成要素と第2の構成要素との間の回線、トレース、または他の媒体を除いて仲介構成要素が存在しないとき、第2の構成要素に直接結合される。第1の構成要素は、第1の構成要素と第2の構成要素との間の回線、トレース、または他の媒体以外の仲介構成要素が存在するとき、第2の構成要素に間接的に結合される。用語「結合される」およびその変化形は、直接的に結合されると間接的に結合されるとの両方を含む。用語「約」の使用は、そうでないことが述べられない限り、後ろの数の±10%を含む範囲を意味する。
【0180】
本明細書において説明された例示的な方法のステップは、必ずしも説明された順序で実行されることを求められず、このような方法のステップの順序は、例示的であるに過ぎないと理解されるべきであることも理解されたい。同様に、さらなるステップが、このような方法に含まれる可能性があり、特定のステップが、本開示の様々な実施形態に一致する方法においては省略されるかまたは組み合わされる可能性がある。
【0181】
いくつかの実施形態が本開示において与えられたが、開示されたシステムおよび方法は、本開示の精神または範囲を逸脱することなく多くの他の特定の形態で具現化される可能性があることが理解されるであろう。これらの例は、例示的であって限定的でないと考えられるべきであり、意図は、本明細書において与えられた詳細に限定されるべきでない。たとえば、様々な要素もしくは構成要素が、組み合わされるかもしくは他のシステムに統合される可能性があり、または特定の特徴が、省略されるかもしくは実装されない可能性がある。
【0182】
加えて、様々な実施形態において分離しているまたは別々であるものとして説明され、図示された技術、システム、サブシステム、および方法は、本開示の範囲を逸脱することなく他のシステム、構成要素、技術、または方法と組み合わされるかまたは統合される可能性がある。変更、置き換え、および改変の他の例が、当業者によって突き止められる可能性があり、本明細書において開示された精神および範囲を逸脱することなくなされる可能性がある。
【符号の説明】
【0183】
100 動作方法
200 コーディングおよびデコーディング(コーデック)システム
201 区分化されたビデオ信号
211 一般コーダ制御構成要素
213 変換・スケーリングおよび量子化構成要素
215 イントラピクチャ推定構成要素
217 イントラピクチャ予測構成要素
219 動き補償構成要素
221 動き推定構成要素
223 復号ピクチャバッファ構成要素
225 ループ内フィルタ構成要素
227 フィルタ制御分析構成要素
229 スケーリングおよび逆変換構成要素
231 ヘッダフォーマットおよびコンテキスト適応2値算術コーディング(CABAC)構成要素
300 ビデオエンコーダ
301 区分化されたビデオ信号
313 変換および量子化構成要素
317 イントラピクチャ予測構成要素
321 動き補償構成要素
323 復号ピクチャバッファ構成要素
325 ループ内フィルタ構成要素
329 逆変換および量子化構成要素
331 エントロピーコーディング構成要素
400 ビデオデコーダ
417 イントラピクチャ予測構成要素
421 動き補償構成要素
423 復号ピクチャバッファ構成要素
425 ループ内フィルタ構成要素
429 逆変換および量子化構成要素
433 エントロピー復号構成要素
500 WPP
501 スライス
511 CTU
512 CTU
516 CTUの列
517 エントリポイント
518 エントリポイントの数(NumEntryPoints)
521 CTUの行
522 CTUの行
523 CTUの行
524 CTUの行
525 CTUの行
600 ビットストリーム
610 SPS
611 ピクチャパラメータセット(PPS)
615 スライスヘッダ
620 画像データ
621 ピクチャ
623 スライス
625 CTU
700 ビデオコーディングデバイス
710 トランシーバユニット(Tx/Rx)
714 コーディングモジュール
720 ダウンストリームポート
730 プロセッサ
732 メモリ
750 アップストリームポート
760 入力および/または出力(I/O)デバイス
800 方法
900 方法
1000 システム
1001 取得モジュール
1002 ビデオエンコーダ
1003 導出モジュール
1004 決定モジュール
1005 コーディングモジュール
1006 記憶モジュール
1007 送信モジュール
1010 ビデオデコーダ
1011 受信モジュール
1013 決定モジュール
1015 決定モジュール
1017 復号モジュール
1019 転送モジュール
【手続補正書】
【提出日】2021-12-07
【手続補正1】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、ビデオコーディングに関し、特に、ビデオコーディングにおいてピクチャのスライス内のコーディングされたデータについてのエントリポイントを決定することに関する。
【背景技術】
【0002】
比較的短いビデオでさえも描くために必要とされるビデオデータの量はかなり多くなり得、それが、データが限られた帯域幅の容量を有する通信ネットワークを介してストリーミングされるかまたはそれ以外の方法で伝達されるべきであるときに困難をもたらし得る。したがって、ビデオデータは、概して、現代の電気通信ネットワークを介して伝達される前に圧縮される。メモリリソースが限られている可能性があるので、ビデオがストレージデバイスに記憶されるとき、ビデオのサイズも問題となり得る。多くの場合、ビデオ圧縮デバイスは、送信元においてソフトウェアおよび/またはハードウェアを使用して送信または記憶の前にビデオデータをコーディングし、それによって、デジタルビデオ画像を表現するために必要とされるデータの量を削減する。圧縮されたデータは、ついで、ビデオデータを復号するビデオ解凍デバイスによって送信先において受信される。限られたネットワークリソースおよびより高いビデオ品質のますます増加する需要により、画像品質をほとんどまたはまったく犠牲にせずに圧縮比を高める改善された圧縮および解凍技術が望ましい。
【発明の概要】
【課題を解決するための手段】
【0003】
実施形態において、本開示は、デコーダにおいて実装される方法であって、デコーダの受信器によって、スライスを含むビットストリームを受信するステップと、デコーダのプロセッサによって、スライス内のエントリポイントの数(NumEntryPoints)を導出するステップと、プロセッサによって、0からNumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するステップと、プロセッサによって、コーディングされたスライスデータのサブセットについてのオフセットに基づいてスライスを復号するステップと、プロセッサによって、復号されたビデオシーケンスの一部として表示するためのスライスを転送するステップとを含む方法を含む。いくつかのビデオコーディングシステムにおいて、エンコーダは、各スライスについてnum_entry_point_offsetsの値をシグナリングする。そして、デコーダは、ビットストリームに基づいてNumEntryPointsの値を設定する。この値は、スライス内のコーディングされたデータの各グループについてのオフセットを決定するために使用される。ついで、これらのグループは、オフセットを使用して復号され得る。この例は、ビットストリーム内で値をシグナリングすることなくNumEntryPointsの値を決定するためのメカニズムを使用する。そのとき、NumEntryPointsは、サブセットと、したがって、スライスとを再構築する前にコーディングツリーユニット(CTU: coding tree unit)の行などのスライスのサブセットについてのオフセットを取得するために使用され得る。たとえば、メカニズムは、スライスが波面並列処理(WPP: wavefront parallel processing)によってコーディングされるときにスライスについてのNumEntryPointsを導出するために使用され得る。NumEntryPointsは、WPP/CTUの行のサイズ、WPP/CTUの列のサイズに基づいて、スライス内のCTUの数に基づいて、ならびに/またはCTUおよび/もしくはスライスアドレスに基づいて導出され得る。この手法は、ビデオストリーム内の各スライスヘッダについてのおよびしたがって各スライスについてのシグナリングされる値を削除する。ピクチャは、複数のスライスを含み得る。さらに、ビデオシーケンスは、何千ものピクチャを含み得る。したがって、ビットストリームからnum_entry_point_offsetsを削除することは、ビデオストリームのサイズを大幅に削減し、コーディングの効率を高め、エンコーダとデコーダとの両方におけるメモリおよびネットワークリソースの使用を削減する。
【0004】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが、スライスが波面並列処理(WPP)によってコーディングされるときに導出されることを提供する。
【0005】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、ビットストリームがスライスヘッダを含み、スライスヘッダがスライス内のエントリポイントのオフセットの数に対応する値を含まないことを提供する。
【0006】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライス内の行のサイズに基づいて導出されることを提供する。
【0007】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライス内の列のサイズに基づいて導出されることを提供する。
【0008】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライス内のコーディングツリーユニット(CTU)の数に基づいて導出されることを提供する。
【0009】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライス内のアドレスに基づいて導出されることを提供する。
【0010】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsがスライスのサイズに基づいて導出されることを提供する。
【0011】
実施形態において、本開示は、エンコーダにおいて実装される方法であって、エンコーダのプロセッサによって、コーディングされた参照ピクチャの参照スライスを取得するステップと、プロセッサによって、参照スライス内のNumEntryPointsを導出するステップと、プロセッサによって、NumEntryPointsに基づいて参照スライス内のコーディングされたデータのサブセットについてのオフセットを決定するステップと、プロセッサによって、参照スライス内のコーディングされたデータのサブセットについてのオフセットに基づいてコーディングされた参照ピクチャの参照スライスを復号するステップと、プロセッサによって、参照スライスに基づいて現在のスライスをビットストリームに符号化するステップと、デコーダに伝達するためのビットストリームをプロセッサに結合されたメモリによって記憶するステップとを含む、方法を含む。いくつかのビデオコーディングシステムにおいて、エンコーダは、各スライスについてnum_entry_point_offsetsの値をシグナリングする。そして、デコーダは、ビットストリームに基づいてNumEntryPointsの値を設定する。この値は、スライス内のコーディングされたデータの各グループについてのオフセットを決定するために使用される。ついで、これらのグループは、オフセットを使用して復号され得る。この例は、ビットストリーム内で値をシグナリングすることなくNumEntryPointsの値を決定するためのメカニズムを使用する。そのとき、NumEntryPointsは、サブセットと、したがって、スライスとを再構築する前にコーディングツリーユニット(CTU)の行などのスライスのサブセットについてのオフセットを取得するために使用され得る。たとえば、メカニズムは、スライスが波面並列処理(WPP)によってコーディングされるときにスライスについてのNumEntryPointsを導出するために使用され得る。NumEntryPointsは、WPP/CTUの行のサイズ、WPP/CTUの列のサイズに基づいて、スライス内のCTUの数に基づいて、ならびに/またはCTUおよび/もしくはスライスアドレスに基づいて導出され得る。この手法は、ビデオストリーム内の各スライスヘッダについてのおよびしたがって各スライスについてのシグナリングされる値を削除する。ピクチャは、複数のスライスを含み得る。さらに、ビデオシーケンスは、何千ものピクチャを含み得る。したがって、ビットストリームからnum_entry_point_offsetsを削除することは、ビデオストリームのサイズを大幅に削減し、コーディングの効率を高め、エンコーダとデコーダとの両方におけるメモリおよびネットワークリソースの使用を削減する。
【0012】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが、参照スライスがWPPによってコーディングされるときに導出されることを提供する。
【0013】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、ビットストリームがスライスヘッダを含み、スライスヘッダが参照スライス内のエントリポイントのオフセットの数に対応する値を含まないことを提供する。
【0014】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライス内の行のサイズに基づいて導出されることを提供する。
【0015】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライス内の列のサイズに基づいて導出されることを提供する。
【0016】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライス内のCTUの数に基づいて導出されることを提供する。
【0017】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライス内のアドレスに基づいて導出されることを提供する。
【0018】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、NumEntryPointsが参照スライスのサイズに基づいて導出されることを提供する。
【0019】
実施形態において、本開示は、プロセッサと、プロセッサに結合された受信器と、プロセッサに結合されたメモリと、プロセッサに結合された送信器とを含み、プロセッサ、受信器、メモリ、および送信器は、上記態様のいずれかの方法を行うように構成されるビデオコーディングデバイスを含む。
【0020】
実施形態において、本開示は、ビデオコーディングデバイスによる使用のためのコンピュータプログラム製品を含む非一時的コンピュータ可読媒体であって、コンピュータプログラム製品は、プロセッサによって実行されるときにビデオコーディングデバイスに上記態様のいずれかの方法を行わせる、非一時的コンピュータ可読媒体に記憶されたコンピュータが実行可能な命令を含む、非一時的コンピュータ可読媒体を含む。
【0021】
実施形態において、本開示は、スライスを含むビットストリームを受信するための受信手段と、スライス内のNumEntryPointsを導出するための導出手段と、0からNumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するための決定手段と、コーディングされたスライスデータのサブセットについてのオフセットに基づいてスライスを復号するための復号手段と、復号されたビデオシーケンスの一部として表示するためのスライスを転送するための転送手段とを含むデコーダを含む。
【0022】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、デコーダが上記態様のいずれかの方法を行うようにさらに構成されることを提供する。
【0023】
実施形態において、本開示は、コーディングされた参照ピクチャの参照スライスを取得するための取得手段と、参照スライス内のNumEntryPointsを導出するための導出手段と、NumEntryPointsに基づいて参照スライス内のコーディングされたデータのサブセットについてのオフセットを決定するための決定手段と、コーディング手段であって、参照スライス内のコーディングされたデータのサブセットについてのオフセットに基づいてコーディングされた参照ピクチャの参照スライスを復号し、参照スライスに基づいて現在のスライスをビットストリームに符号化するための、コーディング手段と、デコーダに伝達するためのビットストリームを記憶するための記憶手段とを含むエンコーダを含む。
【0024】
任意選択で、上記態様のうちのいずれかにおいて、態様の他の実装は、エンコーダが上記態様のいずれかの方法を行うようにさらに構成されることを提供する。
【0025】
明瞭にする目的で、上述の実施形態の任意の1つが、本開示の範囲内の新しい実施形態を生成するために他の上述の実施形態のうちの任意の1つまたは複数と組み合わされてもよい。
【0026】
これらのおよび他の特徴は、以下の詳細な説明を添付の図面および請求項と併せて理解することによってより明瞭に理解されるであろう。
【0027】
本開示のより完全な理解のために、同様の参照番号が同様の部分を表す添付の図面および詳細な説明に関連して解釈される以下の簡単な説明がここで参照される。
【図面の簡単な説明】
【0028】
【
図1】ビデオ信号をコーディングする例示的な方法の流れ図である。
【
図2】ビデオコーディングのための例示的なコーディングおよびデコーディング(コーデック)システムの概略図である。
【
図3】例示的なビデオエンコーダを示す概略図である。
【
図4】例示的なビデオデコーダを示す概略図である。
【
図5】波面並列処理(WPP)の例示的なメカニズムを示す概略図である。
【
図6】例示的なビットストリームを示す概略図である。
【
図7】例示的なビデオコーディングデバイスの概略図である。
【
図8】スライスについてのエントリポイントの数(NumEntryPoints)をシグナリングすることなくビデオシーケンスをビットストリームに符号化する例示的な方法の流れ図である。
【
図9】NumEntryPointsがビットストリームに含まれないときにビデオシーケンスを復号するためにNumEntryPointsを導出する例示的な方法の流れ図である。
【
図10】NumEntryPointsをシグナリングすることなくビットストリームにビデオシーケンスをコーディングするための例示的なシステムの概略図である。
【発明を実施するための形態】
【0029】
まず、以下においては1つまたは複数の実施形態の例示的な実装が与えられるが、開示されるシステムおよび/または方法は、現在知られているのかまたは存在しているのかにかかわらず任意の数の技術を用いて実装されうることを理解されたい。本開示は、本明細書において例示され、説明される例示的な設計および実装を含む、以下で示される例示的な実装、図面、および技術にまったく限定されるべきでなく、添付の請求項の均等物の全範囲と併せたそれらの請求項の範囲内で修正され得る。
【0030】
以下の用語は、本明細書において反する文脈で使用されない限り、以下の通り定義される。特に、以下の定義は、本開示にさらなる明瞭性を与えることが意図される。しかし、用語は、異なる文脈において異なるように説明される可能性がある。したがって、以下の定義は、補足と考えられるべきであり、本明細書においてこのような用語について与えられる説明のいかなる他の定義も限定するものと考えられるべきでない。
【0031】
ビットストリームは、エンコーダとデコーダとの間の送信のために圧縮されるビデオデータを含むシーケンスビットである。エンコーダは、符号化プロセスを用いてビデオデータをビットストリームへと圧縮するように構成されるデバイスである。デコーダは、復号プロセスを用いて表示のためにビットストリームからビデオデータを再構築するように構成されるデバイスである。ピクチャは、ビデオシーケンス内の対応する瞬間におけるユーザへの完全なまたは部分的な表示を目的とする完全な画像である。参照ピクチャは、インター予測によって参照により他のピクチャをコーディングするときに使用され得る参照サンプルを含むピクチャである。コーディングされたピクチャは、インター予測またはイントラ予測によってコーディングされ、ビットストリーム内の単一のアクセスユニット(access unit)に含まれ、ピクチャのコーディングツリーユニット(CTU)の完全なセットを含むピクチャの表現である。スライスは、整数個の完全なタイルまたはピクチャのタイル内の整数個の連続した完全なCTUの行を含むピクチャの区分であり、スライスおよびすべての細分化されたものは、単一のネットワーク抽象化レイヤ(NAL: network abstraction layer)ユニットに排他的に含まれる。参照スライスは、参照サンプルを含む参照ピクチャのスライスであるか、またはインター予測によって参照により他のスライスをコーディングするときに使用される。スライスヘッダは、スライスに表されるすべてのタイルまたはタイル内のCTUの行に関連するデータ要素を含むコーディングされたスライスの部分である。エントリポイントは、コーディングされたスライスの対応するサブセットについてのビデオデータの最初のビットを含むビットストリーム内のビット位置である。オフセットは、知られているビット位置とエントリポイントとの間のビット数で表された距離である。サブセットは、セットの細分化されたものである。たとえば、スライスがセットであるとき、タイル、CTU/コーディングツリーブロック(CTB: coding tree block)の行、またはCTU/CTBは、セットのサブセットである。コーディングツリーユニット(CTU)は、コーディングツリー(coding tree)によって区分化され得る予め定義され
たサイズのサンプルのグループである。CTUの行は、左のスライスの境界と右のスライスの境界との間に水平に延びるCTUのグループである。CTUの列は、上のスライスの境界と下のスライスの境界との間に垂直に延びるCTUのグループである。CTBは、ルマ(luma)サンプルのみ、赤色差(red difference chroma)サンプルのみ、または青色差(blue difference chroma)サンプルのみを含むCTUの一部分である。CTBの行/CTBの列は、ルマサンプルのみ、赤色差サンプルのみ、または青色差サンプルのみを含むCTUの行/列である。CTUおよびCTBは、多くの文脈で交換可能なように使用されうることに留意されたい。波面並列処理(WPP)は、各行が異なるスレッドによって並列に復号されることを可能にするためにスライスのCTU/CTBの行を遅延させてコーディングするメカニズムである。スライスアドレスは、スライスまたはその下位部分の特定可能な位置である。
【0032】
以下の頭字語、コーディングされたビデオシーケンス(CVS: Coded Video Sequence)、復号ピクチャバッファ(DPB)、瞬時復号リフレッシュ(IDR: Instantaneous Decoding Refresh)、イントラランダムアクセスポイント(IRAP)、合同ビデオ専門家チーム(JVET: Joint Video Experts Team)、最下位ビット(LSB)、最上位ビット(MSB)、ネットワーク抽象化レイヤ(NAL)、ピクチャ順序カウント(POC: Picture Order Count)、生バイトシーケンスペイロード(RBSP: Raw Byte Sequence Payload)、リアルタイムトランスポートプロトコル(RTP)、シーケンスパラメータセット(SPS)、多目的ビデオコーディング符号化(VVC Versatile Video Coding)、作業草案(WD)、および波面並列処理(WPP)が、本明細書において使用される。
【0033】
多くのビデオ圧縮技術が、データの最小限の損失でビデオファイルのサイズを削減するために使用され得る。たとえば、ビデオ圧縮技術は、ビデオシーケンスのデータの冗長性を減らすかまたは取り除くために空間(たとえば、イントラピクチャ)予測および/または時間(インターピクチャ)予測を行うことを含み得る。ブロックに基づくビデオコーディングのために、ビデオスライス(たとえば、ビデオピクチャまたはビデオピクチャの一部)が、ビデオブロックに区分化される可能性があり、ビデオブロックは、ツリーブロック、コーディングツリーブロック(CTB)、コーディングツリーユニット(CTU)、コーディングユニット(CU: coding unit)、および/またはコーディングノード(coding node)とも称されうる。ピクチャのイントラコーディングされる(I)スライス内のビデオブロックは、同じピクチャ内の近傍ブロック内の参照サンプルに関連する空間予測を使用してコーディングされる。ピクチャのインターコーディングされる片方向予測(P)または両方向予測(B)スライス内のビデオブロックは、同じピクチャ内の近傍ブロック内の参照サンプルに関連する空間予測または他の参照ピクチャ内の参照サンプルに関連する時間予測を使用することによってコーディングされ得る。ピクチャは、フレームおよび/または画像と称される可能性があり、参照ピクチャは、参照フレームおよび/または参照画像と称されうる。空間または時間予測は、画像ブロックを表す予測ブロックをもたらす。残差データは、元の画像ブロックと予測ブロックとの間のピクセルの差を表す。したがって、インターコーディングされるブロックは、予測ブロックを形成する参照サンプルのブロックを指す動きベクトルと、コーディングされるブロックと予測ブロックとの間の差を示す残差データとによって符号化される。イントラコーディングされるブロックは、イントラコーディングモードおよび残差データによって符号化される。さらなる圧縮のために、残差データが、ピクセル領域(pixel domain)から変換領域(transform domain)に変換され得る。これらは、残差変換係数をもたらし、残差変換係数は、量子化され得る。最初に、量子化された変換係数は、2次元配列に配列され得る。量子化された変換係数は、変換係数の1次元ベクト
ルを生成するためにスキャンされ得る。エントロピーコーディングが、より一層の圧縮を実現するために適用され得る。このようなビデオ圧縮技術は、下でより詳細に検討される。
【0034】
符号化されたビデオが正確に復号され得ることを保証するために、ビデオは、対応するビデオコーディング規格に従って符号化され、復号される。ビデオコーディング規格は、国際電気通信連合(ITU)標準化セクター(ITU-T)H.261、国際標準化機構/国際電気標準会議(ISO/IEC)動画専門家グループ(MPEG)-1パート2、ITU-T H.262またはISO/IEC MPEG-2パート2、ITU-T H.263、ISO/IEC MPEG-4パート2、ITU-T H.264またはISO/IEC MPEG-4パート10としても知られる高度ビデオコーディング(AVC: Advanced Video Coding)、ITU-T H.265またはMPEG-Hパート2としても知られる高効率ビデオコーディング(HEVC: High Efficiency Video Coding)を含む。AVCは、スケーラブルビデオコーディング(SVC: Scalable Video Coding)、多視点ビデオコーディング(MVC: Multiview Video Coding)および多視点ビデオコーディングプラス深度(MVC+D: Multiview Video Coding plus Depth)、ならびに3次元(3D)AVC(3D-AVC)などの拡張を含む。HEVCは、スケーラブルHEVC(SHVC)、多視点HEVC(MV-HEVC)、および3D HEVC(3D-HEVC)などの拡張を含む。ITU-TおよびISO/IECの合同ビデオ専門家チーム(JVET)は、多目的ビデオコーディング(VVC)と称されるビデオコーディング規格の開発を開始した。VVCは、JVET-N1001-v1を含む作業草案(WD)に含まれる。
【0035】
ビデオコーディングシステムは、多くの異なるメカニズムを使用してビデオを符号化し得る。たとえば、ビデオコーディングシステムは、ピクチャをスライスに区分化し得る。いくつかの例において、スライスは、タイルに区分化される。例によっては、スライスおよび/またはスライスのタイルは、ついでCTUの行に区分化され得る。そして、CTUは、コーディングツリーによってコーディングブロックに細分化され、コーディングブロックは、予測メカニズムによってコーディングされる。コーディングされたコーディングブロックは、ついでビットストリームに含められる。WPPにおいて、CTUおよびその区分の行は、並列にコーディングされる。たとえば、WPPは、例によっては、第1のスレッドを使用して第1の行の1つまたは2つのCTUをコーディングし、そして、第2のスレッドを用いて第2の行のCTUのコーディングを開始してもよい。第2の行の1つ/2つのCTUがコーディングされると、第3のスレッドが、第3の行のCTUのコーディングを開始してもよく、以下同様である。いくつかの予測方式は、現在のブロックの上または左に位置するブロックを参照することによってコーディングする。次の行のコーディングの開始の間にCTU遅延を置くことによって、WPPは、現在のブロックがコーディングされる前に現在のブロックの上または左に位置するブロックがコーディングされることを保証することができる。これは、エンコーダが現在のブロックのコーディングを開始するときにこのようなデータが潜在的に利用不可能であるという問題を軽減する。
【0036】
したがって、多数のビットが、ビットストリームに含まれる。さらに、これらのビットの各々は、対応するスライスまたはその下位部分に関連付けられる。デコーダがビットストリームを解釈し、関連するデータを発見するのを支援するために、オフセットの配列がビットストリームに含められ得る。オフセットは、それぞれ、ビットストリーム内の対応するデータの位置を示す。コーディングされたスライスの対応するサブセットについてのビデオデータの最初のビットのオフセットは、エントリポイントとして知られる。WPPの場合、サブセットは、CTUの行である。したがって、WPPにおいては、スライス内のCTUの行数と同じ数のエントリポイントがスライス内に存在し得る。いくつかのビデオコーディングシステムにおいては、num_entry_point_offsetsが、スライスヘッダに含まれる。num_entry_point_offsetsは、スライスに含まれた、したがって、オフセットの配列から取得されるべきオフセットの数をデコーダに示すエントリポイントのオフセットの数をシグナリングするパラメータである。デコーダは、スライスヘッダからのnum_entry_point_offsetsを使用して関連するオフセットを取得し、対応するCTUの復号を開始することができる。この手法は効果的であるが、num_entry_point_offsetsが、複数のビットを含み、いずれのスライスヘッダにおいてもシグナリングされる。各ピクチャはいくつかのスライスを含むことがあり、ビデオシーケンスは何千ものピクチャを含むことがあるので、num_entry_point_offsetsは、何回もシグナリングされ、ビデオシーケンス内のデータの量に著しい集合的な影響を与えうる。
【0037】
本明細書において開示されるのは、デコーダにおいてエントリポイントの数(NumEntryPoints)の値を導出するためのメカニズムである。ついでNumEntryPointsは、サブセットと、したがって、スライスとを再構築する前にスライスのサブセット(たとえば、CTUの行)についてのオフセットを取得するために使用され得る。これは、num_entry_point_offsetsがビットストリームの各スライスヘッダから削除されることを可能にする。これらのメカニズムは、デコーダにおいて、および/またはエンコーダの仮想参照デコーダ(HRD: hypothetical reference decoder)において、使用され得る。ピクチャが複数のスライスを含むことがあり、ビデオが何千ものピクチャを含むことがあるので、ビットストリームからこの値を削除することは、ビデオストリームのサイズを大幅に削減し、コーディングの効率を高め、エンコーダとデコーダとの両方におけるメモリおよびネットワークリソースの使用を削減する。たとえば、メカニズムは、スライスがWPPによってコーディングされるときにスライスについてのNumEntryPointsを導出するために使用され得る。NumEntryPointsは、WPP/CTUの行のサイズ、WPP/CTUの列のサイズに基づいて、スライス内のCTUの数に基づいて、ならびに/またはCTUおよび/もしくはスライスアドレスに基づいて導出され得る。
【0038】
図1は、ビデオ信号をコーディングする例示的な動作方法100の流れ図である。具体的には、ビデオ信号は、エンコーダにおいて符号化される。符号化プロセスは、様々なメカニズムを使用してビデオファイルサイズを削減することによってビデオ信号を圧縮する。より小さなファイルサイズは、圧縮されたビデオファイルが、関連付けられる帯域幅のオーバーヘッドを削減しつつ、ユーザに送信されることを可能にする。そして、デコーダは、圧縮されたビデオファイルを復号して、エンドユーザに対して表示するために元のビデオ信号を再構築する。概して、復号プロセスは、デコーダがビデオ信号を矛盾なく再構築することを可能にするために、符号化プロセスを反映したものである。
【0039】
ステップ101において、ビデオ信号は、エンコーダに入力される。たとえば、ビデオ信号は、メモリに記憶された未圧縮のビデオファイルであり得る。他の例として、ビデオファイルは、ビデオカメラなどのビデオキャプチャデバイスによってキャプチャされ、ビデオのライブストリーミングをサポートするために符号化され得る。ビデオファイルは、オーディオコンポーネントとビデオコンポーネントとの両方を含み得る。ビデオコンポーネントは、順番に見られるときに動きの視覚的な印象を与える一連の画像フレームを含む。フレームは、本明細書においてルマ成分(またはルマサンプル)と称される光と、クロマ(chroma)成分(またはカラーサンプル)と称される色とによって表されるピクセルを含む。いくつかの例において、フレームは、3次元の視聴をサポートするための深度値も含み得る。
【0040】
ステップ103において、ビデオは、ブロックに区分化される。区分化は、各フレームのピクセルを圧縮のために正方形および/または長方形のブロックに細分化することを含む。たとえば、高効率ビデオコーディング(HEVC)(H.265およびMPEG-Hパート2としても知られる)において、フレームは、まず、予め定義されたサイズ(たとえば、64ピクセル×64ピクセル)のブロックであるコーディングツリーユニット(CTU)に分割され得る。CTUは、ルマサンプルとクロマサンプルとの両方を含む。CTUをブロックに分割し、ついで、さらなる符号化をサポートする構成が実現されるまでブロックを繰り返し細分化するためにコーディングツリーが使用され得る。たとえば、フレームのルマ成分は、個々のブロックが比較的均一な照明値を含むまで細分化される可能性がある。たとえば、フレームのクロマ成分は、個々のブロックが比較的均一な色の値を含むまで細分化される可能性がある。したがって、区分化のメカニズムは、ビデオフレームの内容に応じて変わる。
【0041】
ステップ105においては、ステップ103において区分化された画像ブロックを圧縮するために様々な圧縮メカニズムが使用される。たとえば、インター予測および/またはイントラ予測が使用され得る。インター予測は、普通のシーン内の物体が連続したフレームに現れる傾向があるという事実を利用するように設計される。したがって、参照フレームにおいて物体を描くブロックは、隣接するフレームにおいて繰り返し示される必要がない。具体的には、テーブルなどの物体は、複数のフレームにわたって一定の位置にとどまりうる。したがって、テーブルは、一回示され、隣接するフレームは、参照フレームを振り返って参照することができる。パターンマッチングメカニズムは、複数のフレームにわたって物体をマッチングするために使用され得る。さらに、移動する物体は、たとえば、物体の移動またはカメラの移動が原因で複数のフレームにまたがって表される可能性がある。特定の例として、ビデオは、複数のフレームにわたって画面を横切って移動する自動車を示す可能性がある。動きベクトルは、このような移動を示すために使用され得る。動きベクトルは、フレーム内の物体の座標から参照フレーム内の物体の座標までのオフセットを与える2次元ベクトルである。したがって、インター予測は、現在のフレーム内の画像ブロックを、参照フレーム内の対応するブロックからのオフセットを示す動きベクトルのセットとして符号化し得る。
【0042】
イントラ予測は、共通のフレーム内のブロックを符号化する。イントラ予測は、ルマ成分およびクロマ成分がフレーム内でクラスターになる傾向があるという事実を利用する。たとえば、木の一部分の緑の区域は、同様の緑の区域の近傍に位置する傾向がある。イントラ予測は、複数の方向性予測モード(たとえば、HEVCにおいては33個)、planarモード、および直流(DC)モードを使用する。方向性モードは、現在のブロックが対応する方向の近傍ブロックのサンプルと同様/同じであることを示す。Planarモードは、行/列に沿った一連のブロック(たとえば、平面)が、行の端の近傍ブロックに基づいて補間され得ることを示す。実際に、planarモードは、変化する値の比較的一定の勾配を用いることによって行/列間の光/色の滑らかな遷移を示す。DCモードは、境界の平滑化のために使用され、ブロックが方向性予測モードの角度方向に関連付けられるすべての近傍ブロックのサンプルに関連付けられる平均値と同様/同じであることを示す。したがって、イントラ予測ブロックは、画像ブロックを実際の値の代わりに様々な関係予測モードの値として表し得る。さらに、インター予測ブロックは、実際の値の代わりに動きベクトルの値として画像ブロックを表し得る。いずれの場合も、予測ブロックは、場合によっては画像ブロックを正確に表さない可能性がある。すべての差が、残差ブロックに記憶される。ファイルをさらに圧縮するために、残差ブロックに変換が適用され得る。
【0043】
ステップ107において、様々なフィルタリング技術が適用され得る。HEVCにおいては、フィルタは、ループ内フィルタリング方式に従って適用される。上述のブロックに基づく予測は、デコーダにおいてブロックノイズのある画像の生成をもたらす可能性がある。さらに、ブロックに基づく予測方式は、ブロックを符号化し、ついで符号化されたブロックを参照ブロックとして後に使用するために再構築し得る。ループ内フィルタリング方式は、ノイズ抑制フィルタ、デブロッキングフィルタ、適応ループフィルタ(adaptive loop filter)、およびサンプル適応オフセット(SAO: sample adaptive offset)フィルタをブロック/フレームに反復的に適用する。これらのフィルタは、符号化されたファイルが正確に再構築され得るようにこのようなブロッキングアーティファクトを軽減する。さらに、これらのフィルタは、アーティファクトが再構築された参照ブロックに基づいて符号化される後続のブロックにおいてさらなるアーティファクトを生じる可能性がより低くなるように、再構築された参照ブロック内のアーティファクトを軽減する。
【0044】
いったんビデオ信号が区分化され、圧縮され、フィルタリングされると、結果として得られるデータは、ステップ109においてビットストリームに符号化される。ビットストリームは、上述のデータと、デコーダにおいて適切なビデオ信号の再構築をサポートするために望ましい任意のシグナリングデータとを含む。たとえば、このようなデータは、区分化データ、予測データ、残差ブロック、およびデコーダにコーディングの命令を与える様々なフラグを含み得る。ビットストリームは、要求に応じてデコーダに送信するためにメモリに記憶され得る。ビットストリームはまた、複数のデコーダにブロードキャストおよび/またはマルチキャストされ得る。ビットストリームの生成は、反復的なプロセスである。したがって、ステップ101、103、105、107、および109は、多くのフレームおよびブロックにわたって連続的におよび/または同時に行われる可能性がある。
図1に示された順序は、検討の明瞭さおよび容易さのために提示されており、ビデオコーディングプロセスを特定の順序に限定するように意図されていない。
【0045】
デコーダは、ステップ111においてビットストリームを受信し、復号プロセスを開始する。具体的には、デコーダは、エントロピー復号方式を使用して、ビットストリームを対応するシンタックスおよびビデオデータに変換する。デコーダは、ステップ111において、ビットストリームからのシンタックスデータを用いてフレームについての区分を決定する。区分化は、ステップ103におけるブロックの区分化の結果と一致するべきである。ステップ111において使用されるエントロピー符号化/復号について、以下説明する。エンコーダは、入力画像内の値の空間的な位置決めに基づいていくつかの可能な選択肢からブロック区分化方式を選択するなど、圧縮プロセス中に多くの選択を行う。厳密にそのままの選択をシグナリングすることは、多数のビン(bin)を使用し得る。本明細書において使用されるとき、ビンは、変数として扱われる2進値(たとえば、状況に応じて変わる可能性があるビット値)である。エントロピーコーディングは、エンコーダが特定の場合に明らかにうまくいかないすべての選択肢を破棄し、許容可能な選択肢のセットを残すことを可能にする。それぞれの許容可能な選択肢は、ついでコードワードを割り振られる。コードワードの長さは、許容可能な選択肢の数に基づく(たとえば、2つの選択肢のために1つのビン、3つから4つまでの選択肢のために2つのビンなど)。そして、エンコーダは、選択された選択肢についてのコードワードを符号化する。この方式は、コードワードのサイズを削減し、なぜならば、すべての可能な選択肢の潜在的に大きなセットからの選択を一意に示すのとは対照的に、コードワードは、許容可能な選択肢の小さなサブセットからの選択を一意に示すために望ましいだけの大きさであるからである。デコーダは、ついでエンコーダと同様の方法で、許容可能な選択肢のセットを決定することによって選択を復号する。許容可能な選択肢のセットを決定することによって、デコーダは、コードワードを読み、エンコーダによってなされる選択を決定することができる。
【0046】
ステップ113において、デコーダは、ブロックの復号を行う。具体的には、デコーダは、逆変換を用いて残差ブロックを生成する。ついでデコーダは、残差ブロックおよび対応する予測ブロックを用いて、区分化に従って画像ブロックを再構築する。予測ブロックは、ステップ105においてエンコーダで生成されたイントラ予測ブロックとインター予測ブロックとの両方を含み得る。再構築された画像ブロックは、ついでステップ111において決定された区分化データに従って再構築されたビデオ信号のフレーム内に位置付けられる。ステップ113のためのシンタックスも、上述のエントロピーコーディングによってビットストリーム内でシグナリングされ得る。
【0047】
ステップ115において、エンコーダのステップ107と同様にして、再構築されたビデオ信号のフレームに対してフィルタリングが行われる。たとえば、ノイズ抑制フィルタ、デブロッキングフィルタ、適応ループフィルタ、およびSAOフィルタが、ブロッキングアーティファクトを取り除くためにフレームに適用され得る。フレームがフィルタリングされると、ビデオ信号が、エンドユーザによる視聴のためにステップ117においてディスプレイに出力され得る。
【0048】
図2は、ビデオコーディングのための例示的なコーディングおよびデコーディング(コーデック)システム200の概略図である。具体的には、コーデックシステム200は、動作方法100の実装をサポートするための機能を提供する。コーデックシステム200は、エンコーダとデコーダの両方において使用される構成要素を図示するよう一般化されている。コーデックシステム200は、動作方法100のステップ101および103について検討されたようにビデオ信号を受信し、区分化し、その結果、区分化されたビデオ信号201を生じる。ついで、コーデックシステム200は、方法100のステップ105、107、および109について検討されたようにエンコーダとして働くとき、区分化されたビデオ信号201をコーディングされたビットストリームへと圧縮する。デコーダとして働くとき、コーデックシステム200は、動作方法100のステップ111、113、115、および117について検討されたように、ビットストリームから出力ビデオ信号を生成する。コーデックシステム200は、一般コーダ制御構成要素211、変換・スケーリングおよび量子化構成要素213、イントラピクチャ推定構成要素215、イントラピクチャ予測構成要素217、動き補償構成要素219、動き推定構成要素221、スケーリングおよび逆変換構成要素229、フィルタ制御分析構成要素227、ループ内フィルタ構成要素225、復号ピクチャバッファ構成要素223、ならびにヘッダフォーマットおよびコンテキスト適応2値算術コーディング(CABAC: context adaptive binary arithmetic coding)構成要素231を含む。このような構成要素は、図示のように結合される。
図2において、黒い線は、符号化される/復号されるデータの動きを示し、一方、破線は、他の構成要素の動作を制御する制御データの動きを示す。コーデックシステム200の構成要素は、エンコーダにすべて存在しうる。デコーダは、コーデックシステム200の構成要素のサブセットを含みうる。たとえば、デコーダは、イントラピクチャ予測構成要素217、動き補償構成要素219、スケーリングおよび逆変換構成要素229、ループ内フィルタ構成要素225、ならびに復号ピクチャバッファ構成要素223を含みうる。これらの構成要素について、以下説明する。
【0049】
区分化されたビデオ信号201は、コーディングツリーによってピクセルのブロックに区分化されたキャプチャされたビデオシーケンスである。コーディングツリーは、様々な分割モードを用いてピクセルのブロックをピクセルのより小さなブロックに細分化する。ついで、これらのブロックは、より小さなブロックにさらに細分化され得る。ブロックは、コーディングツリーのノードと称されうる。より大きな親ノードが、より小さな子ノードに分割される。ノードが細分化される回数は、ノード/コーディングツリーの深さと称される。分割されたブロックは、場合によってはコーディングユニット(CU)に含まれ得る。たとえば、CUは、ルマブロック、赤色差(Cr)ブロック、および青色差(Cb)ブロックをCUについての対応するシンタックス命令とともに含むCTUの下位部分であり得る。分割モードは、使用される分割モードに応じて変化する形状の2つ、3つ、または4つの子ノードにノードをそれぞれ区分化するために使用される二分木(BT)、三分木(TT)、および四分木(QT)を含みうる。区分化されたビデオ信号201は、圧縮のために一般コーダ制御構成要素211、変換・スケーリングおよび量子化構成要素213、イントラピクチャ推定構成要素215、フィルタ制御分析構成要素227、ならびに動き推定構成要素221に転送される。
【0050】
一般コーダ制御構成要素211は、アプリケーションの制約に従ってビットストリームへのビデオシーケンスの画像のコーディングに関連する決定を行うように構成される。たとえば、一般コーダ制御構成要素211は、ビットレート/ビットストリームサイズ対再構築の品質の最適化を管理する。このような決定は、ストレージ空間/帯域幅の可用性および画像解像度の要求に基づいてなされ得る。また、一般コーダ制御構成要素211は、バッファアンダーランおよびオーバーランの問題を軽減するために、伝送速度を踏まえてバッファの利用を管理する。これらの問題を管理するために、一般コーダ制御構成要素211は、他の構成要素による区分化、予測、およびフィルタリングを管理する。たとえば、一般コーダ制御構成要素211は、解像度を上げ、帯域幅の使用を増やすために、圧縮の複雑さを動的に高くするか、または解像度を下げ、帯域幅の使用を減らすために、圧縮の複雑さを動的に低くし得る。したがって、一般コーダ制御構成要素211は、ビデオ信号の再構築の品質とビットレートの懸念とのバランスを取るためにコーデックシステム200の他の構成要素を制御する。一般コーダ制御構成要素211は、他の構成要素の動作を制御する制御データを生成する。制御データも、デコーダにおける復号のためのパラメータをシグナリングするためにビットストリームに符号化されるようにヘッダフォーマットおよびCABAC構成要素231に転送される。
【0051】
区分化されたビデオ信号201は、インター予測のために動き推定構成要素221および動き補償構成要素219にも送信される。区分化されたビデオ信号201のフレームまたはスライスは、複数のビデオブロックに分割され得る。動き推定構成要素221および動き補償構成要素219は、時間予測を提供するために1つまたは複数の参照フレーム内の1つまたは複数のブロックに対する受信されたビデオブロックのインター予測コーディングを実行する。コーデックシステム200は、たとえば、ビデオデータの各ブロックについての適切なコーディングモードを選択するために複数のコーディングパス(coding pass)を実行し得る。
【0052】
動き推定構成要素221および動き補償構成要素219は、高度に一体化されうるが、概念的な目的のため別々に図示される。動き推定構成要素221によって行われる動き推定は、ビデオブロックについての動きを推定する動きベクトルを生成するプロセスである。動きベクトルは、たとえば、予測ブロックに対するコーディングされるオブジェクトの変位を示し得る。予測ブロックは、ピクセルの差の観点で、コーディングされるブロックによく一致することが分かっているブロックである。予測ブロックは、参照ブロックとも称されうる。このようなピクセルの差は、差分絶対値和(SAD)、差分二乗和(SSD)、または他の差の測定基準によって決定され得る。HEVCは、CTU、コーディングツリーブロック(CTB)、およびCUを含むいくつかのコーディングされるオブジェクトを使用する。たとえば、CTUは、CTBに分割されることができ、ついで、CTBが、CUに含めるためにCBに分割されることができる。CUは、CUのための予測データを含む予測ユニット(PU)および/または変換された残差データを含む変換ユニット(TU)として符号化され得る。動き推定構成要素221は、レート歪み最適化プロセスの一部としてレート歪み分析を用いることによって動きベクトル、PU、およびTUを生成する。たとえば、動き推定構成要素221は、現在のブロック/フレームについての複数の参照ブロック、複数の動きベクトルなどを決定してもよく、最良のレート歪みの特徴を有する参照ブロック、動きベクトルなどを選択してもよい。最良のレート歪みの特徴は、ビデオの再構築の品質(たとえば、圧縮によるデータ損失の量)とコーディングの効率(たとえば、最終的な符号化のサイズ)との両方のバランスを取る。
【0053】
いくつかの例において、コーデックシステム200は、復号ピクチャバッファ構成要素223に記憶された参照ピクチャの整数よりも細かいピクセル位置の値を計算し得る。たとえば、ビデオコーデックシステム200は、参照ピクチャの4分の1ピクセル位置、8分の1ピクセル位置、または他の分数ピクセル(fractional pixel)位置の値を補間し得る。したがって、動き推定構成要素221は、フルピクセル(full pixel)位置および分数ピクセル位置に対する動き探索を行い、分数ピクセルの精度で動きベクトルを出力し得る。動き推定構成要素221は、インターコーディングされるスライス内のビデオブロックのPUについての動きベクトルを、PUの位置を参照ピクチャの予測ブロックの位置と比較することによって計算する。動き推定構成要素221は、計算された動きベクトルを符号化のためにヘッダフォーマットおよびCABAC構成要素231に動きデータとして出力し、動きを動き補償構成要素219に出力する。
【0054】
動き補償構成要素219によって行われる動き補償は、動き推定構成要素221によって決定された動きベクトルに基づいて予測ブロックを取り出すことまたは生成することを含み得る。やはり、動き推定構成要素221および動き補償構成要素219は、いくつかの例において、機能的に統合されうる。現在のビデオブロックのPUについての動きベクトルを受信すると、動き補償構成要素219は、動きベクトルが指す予測ブロックを見つけ得る。そして、コーディングされている現在のビデオブロックのピクセル値から予測ブロックのピクセル値を引き、ピクセル差分値を形成することによって残差ビデオブロックが形成される。概して、動き推定構成要素221は、ルマ成分に対する動き推定を行い、動き補償構成要素219は、クロマ成分とルマ成分との両方のためにルマ成分に基づいて計算された動きベクトルを用いる。予測ブロックおよび残差ブロックは、変換・スケーリングおよび量子化構成要素213に転送される。
【0055】
区分化されたビデオ信号201は、イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217にも送信される。動き推定構成要素221および動き補償構成要素219と同様に、イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217は、高度に一体化されうるが、概念的な目的のために別々に図示される。イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217は、上述のようにフレーム間で動き推定構成要素221および動き補償構成要素219によって行われるインター予測に代わるものとして現在のフレーム内のブロックに対して現在のブロックをイントラ予測する。特に、イントラピクチャ推定構成要素215は、現在のブロックを符号化するために用いるイントラ予測モードを決定する。いくつかの例において、イントラピクチャ推定構成要素215は、複数のテストされたイントラ予測モードから、現在のブロックを符号化するための適切なイントラ予測モードを選択する。ついで、選択されたイントラ予測モードは、符号化のためにヘッダフォーマットおよびCABAC構成要素231に転送される。
【0056】
たとえば、イントラピクチャ推定構成要素215は、様々なテストされたイントラ予測モードについてのレート歪み分析を用いてレート歪み値を計算し、テストされたモードの中で最良のレート歪みの特徴を有するイントラ予測モードを選択する。レート歪み分析は、概して、符号化されたブロックと、符号化されたブロックを生成するために符号化された元の符号化されていないブロックとの間の歪み(または誤差)の量と、符号化されたブロックを生成するために用いられたビットレート(たとえば、ビット数)とを決定する。イントラピクチャ推定構成要素215は、どのイントラ予測モードがブロックについて最良のレート歪み値を示すかを決定するために、様々な符号化されたブロックについての歪みおよびレートから比率を計算する。さらに、イントラピクチャ推定構成要素215は、レート歪み最適化(RDO)に基づいて深度モデリングモード(DMM: depth modeling mode)を用いて深度マップの深度ブロックをコーディングするように構成されうる。
【0057】
イントラピクチャ予測構成要素217は、エンコーダに実装されるとき、イントラピクチャ推定構成要素215によって決定された選択されたイントラ予測モードに基づいて予測ブロックから残差ブロックを生成し得るか、またはデコーダに実装されるとき、ビットストリームから残差ブロックを読み得る。残差ブロックは、行列として表された、予測ブロックと元のブロックとの間の値の差を含む。残差ブロックは、ついで、変換・スケーリングおよび量子化構成要素213に転送される。イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217は、ルマ成分とクロマ成分との両方に対して動作し得る。
【0058】
変換・スケーリングおよび量子化構成要素213は、残差ブロックをさらに圧縮するように構成される。変換・スケーリングおよび量子化構成要素213は、残差ブロックに離散コサイン変換(DCT)、離散サイン変換(DST)、または似た概念の変換といった変換を適用し、残差変換係数値を含むビデオブロックを生成する。ウェーブレット変換、整数変換、サブバンド変換、または他の種類の変換も、使用されうる。変換は、残差情報をピクセル値領域から周波数領域などの変換領域に変換し得る。変換・スケーリングおよび量子化構成要素213は、たとえば、周波数に基づいて変換された残差情報をスケーリングするようにさらに構成される。このようなスケーリングは、異なる周波数情報が異なる粒度で量子化されるように残差情報にスケール因子を適用することを含み、これは、再構築されたビデオの最終的な視覚的品質に影響を与えうる。変換・スケーリングおよび量子化構成要素213は、ビットレートをさらに下げるために変換係数を量子化するようにさらに構成される。量子化プロセスは、係数の一部またはすべてに関連付けられるビット深度を削減し得る。量子化の度合いは、量子化パラメータを調整することによって修正され得る。いくつかの例において、変換・スケーリングおよび量子化構成要素213は、ついで、量子化された変換係数を含む行列のスキャンを行い得る。量子化された変換係数は、ビットストリームに符号化されるためにヘッダフォーマットおよびCABAC構成要素231に転送される。
【0059】
スケーリングおよび逆変換構成要素229は、動き推定をサポートするために変換・スケーリングおよび量子化構成要素213の逆の演算を適用する。スケーリングおよび逆変換構成要素229は、たとえば、他の現在のブロックのための予測ブロックになる可能性がある参照ブロックとしての後の使用のために、ピクセル領域の残差ブロックを再構築するために逆スケーリング、逆変換、および/または逆量子化を適用する。動き推定構成要素221および/または動き補償構成要素219は、後のブロック/フレームの動き推定における使用のために対応する予測ブロックに残差ブロックを足して戻すことによって参照ブロックを計算し得る。スケーリング、量子化、および変換中に生じたアーティファクトを軽減するために、再構築された参照ブロックにフィルタが適用される。このようなアーティファクトは、さもでなければ、後続のブロックが予測されるときに、不正確な予測をもたらす(およびさらなるアーティファクトを生じる)。
【0060】
フィルタ制御分析構成要素227およびループ内フィルタ構成要素225は、残差ブロックおよび/または再構築された画像ブロックにフィルタを適用する。たとえば、スケーリングおよび逆変換構成要素229からの変換された残差ブロックは、元の画像ブロックを再構築するためにイントラピクチャ予測構成要素217および/または動き補償構成要素219からの対応する予測ブロックと組み合わされ得る。ついで、再構築された画像ブロックにフィルタが適用され得る。いくつかの例において、フィルタは、その代わりに残差ブロックに適用され得る。
図2の他の構成要素と同様に、フィルタ制御分析構成要素227およびループ内フィルタ構成要素225は、高度に一体化され、一緒に実装されうるが、概念的な目的のために別々に図示される。再構築された参照ブロックに適用されるフィルタは、特定の空間的な領域に適用され、このようなフィルタがどのように適用されるかを調整するための複数のパラメータを含む。フィルタ制御分析構成要素227は、このようなフィルタがどこに適用されるべきかを決定するために再構築された参照ブロックを分析し、対応するパラメータを設定する。このようなデータは、符号化のためにフィルタ制御データとしてヘッダフォーマットおよびCABAC構成要素231に転送される。ループ内フィルタ構成要素225は、フィルタ制御データに基づいてこのようなフィルタを適用する。フィルタは、デブロッキングフィルタ、ノイズ抑制フィルタ、SAOフィルタ、および適応ループフィルタを含み得る。このようなフィルタは、例によっては、(たとえば、再構築されたピクセルブロックに対して)空間/ピクセル領域において、または周波数領域において適用され得る。
【0061】
エンコーダとして動作するとき、フィルタリングされた再構築された画像ブロック、残差ブロック、および/または予測ブロックは、上述されたように、動き推定において後の使用のために復号ピクチャバッファ構成要素223に記憶される。デコーダとして動作するとき、復号ピクチャバッファ構成要素223は、再構築され、フィルタリングされたブロックを記憶し、出力ビデオ信号の一部としてディスプレイに転送する。復号ピクチャバッファ構成要素223は、予測ブロック、残差ブロック、および/または再構築された画像ブロックを記憶することが可能な任意のメモリデバイスであってよい。
【0062】
ヘッダフォーマットおよびCABAC構成要素231は、コーデックシステム200の様々な構成要素からデータを受信し、このようなデータをデコーダに送信するためにコーディングされたビットストリームに符号化する。具体的には、ヘッダフォーマットおよびCABAC構成要素231は、一般的な制御データおよびフィルタ制御データなどの制御データを符号化するための様々なヘッダを生成する。さらに、イントラ予測および動きデータを含む予測データならびに量子化された変換係数データの形態の残差データは、すべてビットストリームに符号化される。最終的なビットストリームは、元の区分化されたビデオ信号201を再構築するためにデコーダによって望まれるすべての情報を含む。このような情報は、イントラ予測モードのインデックステーブル(コードワードマッピングテーブルとも称される)、様々なブロックについての符号化コンテキストの定義、最も可能性が高いイントラ予測モードのしるし、区分化情報のしるしなども含み得る。このようなデータは、エントロピーコーディングを用いることによって符号化され得る。たとえば、情報は、コンテキスト適応可変長コーディング(CAVLC: context adaptive variable length coding)、CABAC、シンタックスに基づくコンテキスト適応2値算術コーディング(SBAC: syntax-based context-adaptive binary arithmetic coding)、確率間隔区分エントロピー(PIPE: probability interval partitioning entropy)コーディング、または他のエントロピーコーディング技術を用いて符号化されうる。エントロピーコーディングの後、コーディングされたビットストリームが、他のデバイス(たとえば、ビデオデコーダ)に送信されるか、または後で送信するかもしくは取り出すためにアーカイブされ得る。
【0063】
図3は、例示的なビデオエンコーダ300を示すブロック図である。ビデオエンコーダ300は、コーデックシステム200の符号化機能を実施する、ならびに/または動作方法100のステップ101、103、105、107、および/もしくは109を実施するために使用され得る。エンコーダ300は、入力ビデオ信号を区分化し、区分化されたビデオ信号201と実質的に同様である区分化されたビデオ信号301を生じる。ついで、区分化されたビデオ信号301は、エンコーダ300の構成要素によって圧縮され、ビットストリームに符号化される。
【0064】
具体的には、区分化されたビデオ信号301は、イントラ予測のためにイントラピクチャ予測構成要素317に転送される。イントラピクチャ予測構成要素317は、イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217と実質的に同様でありうる。区分化されたビデオ信号301は、復号ピクチャバッファ構成要素323内の参照ブロックに基づくインター予測のために動き補償構成要素321にも転送される。動き補償構成要素321は、動き推定構成要素221および動き補償構成要素219と実質的に同様でありうる。イントラピクチャ予測構成要素317および動き補償構成要素321からの予測ブロックおよび残差ブロックは、残差ブロックの変換および量子化のために変換および量子化構成要素313に転送される。変換および量子化構成要素313は、変換・スケーリングおよび量子化構成要素213と実質的に同様でありうる。変換され、量子化された残差ブロックおよび対応する予測ブロックは、ビットストリームにコーディングするためにエントロピーコーディング構成要素331に(関連付けられる制御データと一緒に)転送される。エントロピーコーディング構成要素331は、ヘッダフォーマットおよびCABAC構成要素231と実質的に同様でありうる。
【0065】
変換され、量子化された残差ブロックおよび/または対応する予測ブロックはまた、動き補償構成要素321による使用のために参照ブロックへと再構築するために変換および量子化構成要素313から逆変換および量子化構成要素329に転送される。逆変換および量子化構成要素329は、スケーリングおよび逆変換構成要素229と実質的に同様でありうる。ループ内フィルタ構成要素325のループ内フィルタもまた、例によっては残差ブロックおよび/または再構築された参照ブロックに適用される。ループ内フィルタ構成要素325は、フィルタ制御分析構成要素227およびループ内フィルタ構成要素225と実質的に同様でありうる。ループ内フィルタ構成要素325は、ループ内フィルタ構成要素225について検討されたように複数のフィルタを含み得る。そして、フィルタリングされたブロックは、動き補償構成要素321による参照ブロックとしての使用のために復号ピクチャバッファ構成要素323に記憶される。復号ピクチャバッファ構成要素323は、復号ピクチャバッファ構成要素223と実質的に同様でありうる。
【0066】
図4は、例示的なビデオデコーダ400を示すブロック図である。ビデオデコーダ400は、コーデックシステム200の復号機能を実施する、ならびに/または動作方法100のステップ111、113、115、および/もしくは117を実施するために使用されうる。デコーダ400は、たとえば、エンコーダ300からビットストリームを受信し、エンドユーザに対して表示するためにビットストリームに基づいて再構築された出力ビデオ信号を生成する。
【0067】
ビットストリームは、エントロピー復号構成要素433によって受信される。エントロピー復号構成要素433は、CAVLC、CABAC、SBAC、PIPEコーディング、または他のエントロピーコーディング技術などのエントロピー復号方式を実施するように構成される。たとえば、エントロピー復号構成要素433は、ビットストリームにコードワードとしてコーディングされたさらなるデータを解釈するためのコンテキストを与えるためにヘッダ情報を使用し得る。復号された情報は、一般的な制御データ、フィルタ制御データ、区分化情報、動きデータ、予測データ、および残差ブロックからの量子化された変換係数などの、ビデオ信号を復号するための任意の所望の情報を含む。量子化された変換係数は、残差ブロックへの再構築のために逆変換および量子化構成要素429に転送される。逆変換および量子化構成要素429は、逆変換および量子化構成要素329と同様でありうる。
【0068】
再構築された残差ブロックおよび/または予測ブロックは、イントラ予測動作に基づいて画像ブロックへと再構築するためにイントラピクチャ予測構成要素417に転送される。イントラピクチャ予測構成要素417は、イントラピクチャ推定構成要素215およびイントラピクチャ予測構成要素217と同様でありうる。具体的には、イントラピクチャ予測構成要素417は、予測モードを用いてフレーム内の参照ブロックをみつけ、イントラ予測された画像ブロックを再構築するために結果に残差ブロックを適用する。再構築されたイントラ予測された画像ブロックおよび/または残差ブロックならびに対応するインター予測データは、ループ内フィルタ構成要素425を介して復号ピクチャバッファ構成要素423に転送され、これらの構成要素は、それぞれ、復号ピクチャバッファ構成要素223およびループ内フィルタ構成要素225と実質的に同様でありうる。ループ内フィルタ構成要素425は、再構築された画像ブロック、残差ブロック、および/または予測ブロックをフィルタリングし、このような情報は、復号ピクチャバッファ構成要素423に記憶される。復号ピクチャバッファ構成要素423からの再構築された画像ブロックは、インター予測のために動き補償構成要素421に転送される。動き補償構成要素421は、動き推定構成要素221および/または動き補償構成要素219と実質的に同様でありうる。具体的には、動き補償構成要素421は、参照ブロックからの動きベクトルを使用して予測ブロックを生成し、画像ブロックを再構築するために結果に残差ブロックを適用する。結果として得られる再構築されたブロックは、ループ内フィルタ構成要素425を介して復号ピクチャバッファ構成要素423にやはり転送され得る。復号ピクチャバッファ構成要素423は、さらなる再構築された画像ブロックの記憶を続け、それらの再構築された画像ブロックは、区分化情報によってフレームに再構築され得る。また、このようなフレームは、シーケンスに配置され得る。シーケンスは、再構築された出力ビデオ信号としてディスプレイに出力される。
【0069】
図5は、WPP 500の例示的なメカニズムを示す概略図である。たとえば、WPP 500は、スライス501を符号化するおよび/または復号するために方法100の一部として使用され得る。したがって、WPP 500は、コーデックシステム200、エンコーダ300、および/またはデコーダ400によって使用され得る。
【0070】
図示されるように、WPP 500は、スライス501に適用される。スライス501は、ピクチャの区分である。具体的には、ピクチャは、1つまたは複数のスライス501に区分化され得る。スライス501は、整数個の連続した完全なCTUの行521、522、523、524、および525を含み得る。さらに、スライス501ならびにすべての細分化されたもの(たとえば、CTU 511および512)は、単一のNALユニットに排他的に含まれる。スライス501が整数個の連続した完全なCTUの行521、522、523、524、および525を含むとき、WPP 500が適用され得る。任意選択で、いくつかの例において、スライス501は、1つまたは複数のタイルを含んでもよく、このようなタイルが、それぞれ、整数個の連続した完全なCTUの行521、522、523、524、および525を含み得る。したがって、スライス501は、VVC規格において、単一のNALユニットに排他的に含まれるピクチャの整数個の完全なタイルまたはタイル内の整数個の連続する完全なCTUの行521~525として定義される。
【0071】
スライス501は、CTU 511および512を含む。CTU 511/512は、コーディングツリーによってコーディングブロックに区分化され得る予め定義されたサイズのサンプルのグループである。たとえば、CTU 511および512は、CTUの行521~525およびCTUの列516に配置され得る。CTUの行521~525は、スライス501の左の境界とスライス501の右の境界との間に水平に延びるCTU 511/512のグループである。CTUの列516は、スライス501の上の境界とスライス501の下の境界との間に垂直に延びるCTU 511/512のグループである。
【0072】
WPP 500は、CTU 511/512をコーディングするために並列に動作する複数の計算スレッドを使用し得る。図示された例において、CTU 511は、既にコーディングされており、CTU 512は、まだコーディングされていない。たとえば、第1のスレッドが、第1の時間にCTUの行521のコーディングを開始し得る。CTU 511が第1のCTUの行521においてコーディングされると、第2のスレッドが、CTUの行522のコーディングを開始し得る。CTU 511が第2のCTUの行522においてコーディングされると、第3のスレッドが、CTUの行523のコーディングを開始し得る。CTU 511が第3のCTUの行523においてコーディングされると、第4のスレッドが、CTUの行524のコーディングを開始し得る。CTU 511が第4のCTUの行524においてコーディングされると、第5のスレッドが、第5のCTUの行525のコーディングを開始し得る。これは、
図5に示されるパターンをもたらす。さらなるスレッドが、要望に応じて使用され得る。このメカニズムは、波面に似た見た目のパターンを生じ、したがって、WPP 500の名前とされる。いくつかのビデオコーディングは、現在のCTU 512の上または左に位置するコーディングされたCTU 511に基づいて現在のCTU 512をコーディングする。WPP 500は、コーディングされる任意の現在のCTU 512に到達するときにこのようなCTU 511が既にコーディングされていることを保証するために、各スレッドの開始の間にCTU 511コーディング遅延を残す。VVC規格を用いるシステムが1つのCTU 511コーディング遅延を用い得る一方、HEVCなどの他のシステムは2つのCTU 511コーディング遅延を用い得ることに留意されたい。任意の他のCTU 511コーディング遅延の値も、本開示の範囲内で用いられ得る。
【0073】
CTU 511は、CTUの行521~525においてビットストリームにコーディングされる。たとえば、CTUの行521が、ビットストリームに含められ、その後にCTUの行522が続き、その後にCTUの行523が続き、その後にCTUの行524が続き、その後にCTUの行525が続き、以下同様であってもよい。各CTUの行521~525は、ビットストリーム内のスライス501の独立してアドレス指定可能なサブセットであってもよい。たとえば、各CTUの行521~525は、エントリポイント517においてアドレス指定され得る。エントリポイント517は、スライス501が符号化された後、スライス501の対応するサブセットについてのビデオデータの最初のビットを含むビットストリーム内のビット位置である。WPP 500が用いられるとき、エントリポイント517は、対応するCTUの行521~525の最初のビットを含むビット位置である。たとえば、CTUの行523のエントリポイント517は、CTUの行523についてのビデオデータの最初のビットを含み、CTUの行522についてのビデオデータの最後のビットの後に位置付けられる。したがって、エントリポイントの数(NumEntryPoints)518は、CTUの行521~525についてのエントリポイント517の数である。
【0074】
いくつかのビデオコーディングシステムにおいては、エントリポイント517についてのビットオフセットは、スライス501に関連付けられるスライスヘッダの中の配列内でシグナリングされ得る。さらに、エンコーダは、NumEntryPoints 518を決定することができ、このようなデータをスライスヘッダ内で、たとえば、num_entry_point_offsetsパラメータ内でシグナリングする。デコーダは、ついでエントリポイント517の数を用いて、復号を開始するためのすべての関連のあるエントリポイント517を取得するために配列からいくつのビットオフセットが取得されるべきであるかを決定することができる。num_entry_point_offsetsパラメータは、複数のビットを含み、各スライスヘッダ内でシグナリングされる。各ピクチャはいくつかのスライス501を含んでもよく、ビデオシーケンスは何千ものピクチャを含んでもよいので、num_entry_point_offsetsは、何回もシグナリングされ、ビデオシーケンス内のデータの量に著しい集合的な影響を与えうる。
【0075】
本開示は、ビットストリーム内でこのようなデータをシグナリングすることなくデコーダ(および/またはエンコーダのHRD)においてNumEntryPoints 518を導出するための様々なメカニズムを含む。したがって、num_entry_point_offsetsが、ビットストリームから省略されることができ、これは、全体的なビットストリームの圧縮を大幅に向上させる。たとえば、メカニズムは、スライス501がWPP 500によってコーディングされるときスライス501についてのNumEntryPoints 518を導出するために使用され得る。NumEntryPoints 518は、CTUの行521~525のサイズに基づいて、CTUの列516のサイズに基づいて、スライス501内のCTU 511/512の数に基づいて、ならびに/またはCTU 511/512および/もしくはスライス501のアドレスに基づいて導出され得る。
【0076】
たとえば、NumEntryPoints 518は、以下のように導出され得る。
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice - 1
}
ここで、!entropy_coding_sync_enabled_flagは、WPP 500が使われていないことを示し、NumBricksInCurrSliceは、スライス501内のタイルの数であり、numBrickSpecificCtuRowsInSliceは、スライス501内のCTUの行521~525の数であり、BrickHeight[ SliceBrickIdx[ i ] ]は、CTUの行521~525の高さ(したがってCTUの列516の高さ)である。entropy_coding_sync_enabled_flagは、WPP 500がスライス501をコーディングするために使用されるかどうかを示すために使用され得ることに留意されたい。たとえば、entropy_coding_sync_enabled_flagは、WPP 500が使用されるとき、1に設定され、WPP 500が使用されないとき、0に設定され得る。いくつかのコーディングシステムにおいて、!は、否定の値を示す。したがって、!entropy_coding_sync_enabled_flagは、上述の擬似コードのif節について、WPP 500が使用されていないことを示す。したがって、WPPは、上述の擬似コードのelse節について使用されている。
【0077】
例は、スライス501がWPP 500を用いるかどうかを確認する。WPP 500が用いられない場合、NumEntryPoints 518は、スライス501内のタイル数よりも1少ない。それ以外の場合、WPP 500が用いられる。このような場合、例は、スライス501の高さ(およびしたがってCTUの列516の高さ)と比較してCTUの行521~525の各々の高さを合計することによってCTUの行521~525の数を決定する。NumEntryPoints 518は、CTUの行521~525の数よりも1少ない。
【0078】
図6は、例示的なビットストリーム600を示す概略図である。たとえば、ビットストリーム600は、方法100に従ってコーデックシステム200および/またはデコーダ400による復号のためにコーデックシステム200および/またはエンコーダ300によって生成され得る。さらに、ビットストリーム600は、WPP 500によってコーディングされたスライス501を含み得る。
【0079】
ビットストリーム600は、SPS 610、複数のピクチャパラメータセット(PPS)611、複数のスライスヘッダ615、および画像データ620を含む。SPS 610は、ビットストリーム600に含まれるコーディングされたビデオシーケンス内のすべてのピクチャに共通のシーケンスデータを含む。このようなデータは、ピクチャのサイズ設定、ビット深度、コーディングツールのパラメータ、ビットレートの制約などを含み得る。PPS 611は、ピクチャ全体に適用されるパラメータを含む。したがって、ビデオシーケンス内の各ピクチャは、PPS 611を参照し得る。各ピクチャはPPS 611を参照するが、いくつかの例においては、単一のPPS 611が複数のピクチャについてのデータを含み得ることに留意されたい。たとえば、複数の同様のピクチャは、同様のパラメータによってコーディングされ得る。このような場合、単一のPPS 611が、このような同様のピクチャについてのデータを含み得る。PPS 611は、対応するピクチャ内のスライスのために利用可能なコーディングツール、量子化パラメータ、オフセットなどを示し得る。スライスヘッダ615は、ピクチャ内の各スライスに固有のパラメータを含む。したがって、ビデオシーケンス内のスライス毎に1つのスライスヘッダ615が存在しうる。スライスヘッダ615は、スライスタイプ情報、POC、参照ピクチャリスト、予測の重み、タイルエントリポイント、デブロッキングパラメータなどを含み得る。スライスヘッダ615は、文脈によってはタイルグループヘッダとも称されうることに留意されたい。
【0080】
画像データ620は、インター予測および/またはイントラ予測によって符号化されたビデオデータならびに対応する変換され、量子化された残差データを含む。たとえば、ビデオシーケンスは、複数のピクチャ621を含む。ピクチャ621は、ビデオシーケンス内の対応する瞬間におけるユーザへの完全なまたは部分的な表示を目的とする完全な画像である。ピクチャ621は、単一のアクセスユニット(AU)に含まれ得る。ピクチャ621は、1つまたは複数のスライス623を含む。スライス623は、単一のNALユニットに排他的に含まれるピクチャ621の整数個の完全なタイルまたは(たとえば、タイル内の)整数個の連続する完全なCTUの行として定義され得る。たとえば、スライス623は、スライス501と実質的に同様でありうる。スライス623は、CTU 625および/またはコーディングツリーブロック(CTB)にさらに分割される。CTU 625は、コーディングツリーによって区分化され得る予め定義されたサイズのサンプルのグループである。たとえば、ビットストリーム600内のCTU 625は、符号化されており、したがって、CTU 511と実質的に同様でありうる。CTBは、CTU 625のサブセットであり、CTUのルマ成分またはクロマ成分を含む。CTU 625/CTBは、コーディングツリーに基づいてコーディングブロックにさらに分割される。そして、コーディングブロックが、予測メカニズムによって符号化/復号され得る。
【0081】
上述のように、NumEntryPoints 518は、デコーダにおいて決定され得る。したがって、スライスヘッダ615は、num_entry_point_offsetsパラメータ、またはNumEntryPoints 518の値を示す他のパラメータを含まない。num_entry_point_offsetsは、各スライスヘッダ615から削除され、ビットストリーム600が、圧縮される。これは、エンコーダとデコーダとの両方においてメモリおよびネットワークリソースの使用を削減する。
【0082】
上述の情報について、以下、本明細書においてより詳細に説明する。映像コーデックの仕様において、ピクチャは、複数の目的で特定されるべきである。これらは、インター予測における参照ピクチャとしての使用のため、DPBからのピクチャの出力のため、動きベクトルのスケーリングのため、重み付けされた予測ためなどを含む。たとえば、ピクチャは、ピクチャ順序カウント(POC)によって特定され得る。いくつかのビデオコーディングシステムにおいては、DPB内のピクチャは、短期的参照のために使用されるか、長期的参照のために使用されるか、または参照のために使用されないものとしてマーキングされ得る。ピクチャが参照のために使用されないものとしてマーキングされると、ピクチャは、もはや予測のために使用され得ない。このようなピクチャがもはや出力のために必要とされないとき、ピクチャは、DPBから削除され得る。
【0083】
いくつかのビデオコーディングシステムは、短期および長期参照ピクチャを用いる。参照ピクチャは、ピクチャが予測参照としての使用のためにもはや必要とされないとき、参照のために使用されないものとしてマーキングされ得る。これらの3つのステータス(たとえば、短期、長期、および参照のために使用されない)の間のピクチャの変換は、復号された参照ピクチャのマーキングプロセスによって制御され得る。たとえば、暗黙的なスライディングウィンドウプロセスおよび/または明示的なメモリ管理制御動作(MMCO: memory management control operation)プロセスが、参照ピクチャをマーキングするために用いられ得る。スライディングウィンドウプロセスは、参照フレームの数がSPS内に記憶され得る参照フレームの最大数(max_num_ref_frames)に等しいとき、短期参照ピクチャを参照のために使用されないものとしてマーキングする。短期参照ピクチャは、最も新しく復号された短期ピクチャがDPBに保有されるように先入れ先出し方式で記憶され得る。明示的なMMCOプロセスは、複数のMMCOコマンドを含み得る。MMCOコマンドは、1つもしくは複数の短期もしくは長期参照ピクチャを参照のために使用されないものとしてマーキングする可能性があり、すべてのピクチャを参照のために使用されないものとしてマーキングする可能性があり、または現在の参照ピクチャもしくは既存の短期参照ピクチャを長期としてマーキングし、その長期参照ピクチャに長期ピクチャインデックスを割り振る可能性がある。いくつかのビデオコーディングシステムにおいては、参照ピクチャのマーキング動作ならびにDPBからのピクチャの出力および削除のためのプロセスが、ピクチャが復号された後に行われる。
【0084】
他のビデオコーディングシステムは、参照ピクチャの管理のために参照ピクチャセット(RPS: reference picture set)を用いる。RPSプロセスとMMCO/スライディングウィンドウプロセスとの間の1つの違いは、現在のピクチャまたは任意の後続のピクチャによって使用される参照ピクチャの完全なセットが各スライスについて提供されることである。したがって、現在のまたは将来のピクチャによる使用のためにDPBに保有されるべきすべてのピクチャの完全なセットが、シグナリングされる。これは、DPBへの相対的な変更のみをシグナリングする方式とは異なる。RPSメカニズムは、DPB内の参照ピクチャの正しいステータスを維持するために、復号順で先のピクチャからの情報を保有する必要がない。ピクチャの復号およびDPBの動作の対応する変更は、RPSの利点を活かし、誤り耐性を高めるために使用されうる。いくつかのビデオコーディングシステムにおいて、ピクチャのマーキング、およびDPBからの復号されたピクチャの出力と削除との両方を含むバッファの動作は、現在のピクチャが復号された後に適用され得る。他のビデオコーディングシステムにおいて、RPSは、現在のピクチャのスライスヘッダから最初に復号される。そのとき、ピクチャのマーキングおよびバッファの動作は、概して、現在のピクチャを復号する前に適用される。
【0085】
他のビデオコーディングシステムは、参照ピクチャリスト0および参照ピクチャリスト1と表記される2つの参照ピクチャリストに基づいて参照ピクチャを管理する。この手法においては、ピクチャについての参照ピクチャリストが、参照ピクチャリスト初期化プロセスおよび参照ピクチャリスト修正プロセスを使用することなく直接構築され得る。さらに、参照ピクチャのマーキングが、2つの参照ピクチャリストに基づいて直接実行される。例示的な参照ピクチャの管理に関連するシンタックスおよびセマンティクス(semantics)は、以下の通りである。
【0086】
例示的なシーケンスパラメータセットのRBSPのシンタックスは、以下の通りである。
【0087】
【0088】
例示的なピクチャパラメータセットのRBSPのシンタックスは、以下の通りである。
【0089】
【0090】
一般スライスヘッダのシンタックスの例は、以下の通りである。
【0091】
【0092】
【0093】
例示的な参照ピクチャリスト構造のシンタックスは、以下の通りである。
【0094】
【0095】
例示的なシーケンスパラメータセットのRBSPのセマンティクスは、以下の通りである。log2_max_pic_order_cnt_lsb_minus4は、ピクチャ順序カウントについての復号プロセスにおいて使用される変数MaxPicOrderCntLsbの値を次のように指定する。
MaxPicOrderCntLsb = 2( log2_max_pic_order_cnt_lsb_minus4 + 4 ) (7-7)
log2_max_pic_order_cnt_lsb_minus4の値は、0と12を含んで0から12までの範囲内にありうる。sps_max_dec_pic_buffering_minus1に1を足した値は、ピクチャストレージバッファを単位としてCVSのための復号ピクチャバッファの最大の必要とされるサイズを指定する。sps_max_dec_pic_buffering_minus1の値は、0およびMaxDpbSize - 1を含んで0からMaxDpbSize - 1までの範囲内にありえ、MaxDpbSizeは、他のどこかで指定される。long_term_ref_pics_flagは、長期参照ピクチャ(LTRP)がCVS内のいかなるコーディングされるピクチャのインター予測にも使用されないことを指定するために0に等しいように設定され得る。long_term_ref_pics_flagは、LTRPがCVS内の1つまたは複数のコーディングされるピクチャのインター予測のために使用されうることを指定するために1に等しいように設定され得る。sps_idr_rpl_present_flagは、参照ピクチャリストのシンタックス要素がIDRピクチャのスライスヘッダ内に存在することを指定するために1に等しいように設定され得る。sps_idr_rpl_present_flagは、参照ピクチャリストのシンタックス要素がIDRピクチャのスライスヘッダ内に存在しないことを指定するために0に等しいように設定され得る。
【0096】
rpl1_same_as_rpl0_flagは、シンタックス構造num_ref_pic_lists_in_sps[ 1 ]およびref_pic_list_struct( 1, rplsIdx )が存在せず、以下が適用されることを指定するために1に等しいように設定され得る。num_ref_pic_lists_in_sps[ 1 ]の値は、num_ref_pic_lists_in_sps[ 0 ]の値に等しいと推測される。ref_pic_list_struct( 1, rplsIdx )の各シンタックス要素の値は、0からnum_ref_pic_lists_in_sps[ 0 ] - 1までの範囲のrplsIdxに関するref_pic_list_struct( 0, rplsIdx )の対応するシンタックス要素の値に等しいと推測される。num_ref_pic_lists_in_sps[ i ]は、SPSに含まれるlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の数を指定する。num_ref_pic_lists_in_sps[ i ]の値は、0および64を含んで0から64までの範囲内にありうる。(0または1に等しい)listIdxの各値に関して、デコーダは、現在のピクチャのスライスヘッダ内で直接シグナリングされた1つのref_pic_list_struct( listIdx, rplsIdx )シンタックス構造が存在し得るので、合計num_ref_pic_lists_in_sps[ i ] + 1個のref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のためにメモリを割り当てるべきである。
【0097】
例示的なピクチャパラメータセットのRBSPのセマンティクスは、以下の通りである。num_ref_idx_default_active_minus1[ i ]に1を足した値は、iが0に等しいとき、num_ref_idx_active_override_flagが0に等しいPまたはBスライスに関する変数NumRefIdxActive[ 0 ]の推測された値を指定し、iが1に等しいとき、num_ref_idx_active_override_flagが0に等しいBスライスに関するNumRefIdxActive[ 1 ]の推測された値を指定する。num_ref_idx_default_active_minus1[ i ]の値は、0および14を含んで0から14までの範囲内にあるべきである。rpl1_idx_present_flagは、ref_pic_list_sps_flag[ 1 ]およびref_pic_list_idx[ 1 ]がスライスヘッダ内に存在しないことを指定するために0に等しいように設定され得る。rpl1_idx_present_flagは、ref_pic_list_sps_flag[ 1 ]およびref_pic_list_idx[ 1 ]がスライスヘッダ内に存在しうることを指定するために1に等しいように設定され得る。
【0098】
一般スライスヘッダのセマンティクスの例は、以下の通りである。slice_pic_order_cnt_lsbは、ピクチャ順序カウントを現在のピクチャに関するMaxPicOrderCntLsbで割った余りを指定する。slice_pic_order_cnt_lsbシンタックス要素の長さは、log2_max_pic_order_cnt_lsb_minus4 + 4ビットである。slice_pic_order_cnt_lsbの値は、0およびMaxPicOrderCntLsb - 1を含んで0からMaxPicOrderCntLsb - 1までの範囲内にあるべきである。ref_pic_list_sps_flag[ i ]は、現在のスライスの参照ピクチャリストiがアクティブなSPS内でlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のうちの1つに基づいて導出されることを指定するために1に等しいように設定され得る。ref_pic_list_sps_flag[ i ]は、現在のピクチャの参照ピクチャリストiが現在のピクチャのスライスヘッダに直接含まれるlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造に基づいて導出されることを指定するために0に等しいように設定され得る。num_ref_pic_lists_in_sps[ i ]が0に等しいとき、ref_pic_list_sps_flag[ i ]の値は、0に等しいと推測される。rpl1_idx_present_flagが0に等しいとき、ref_pic_list_sps_flag[ 1 ]の値は、ref_pic_list_sps_flag[ 0 ]に等しいと推測される。
【0099】
ref_pic_list_idx[ i ]は、現在のピクチャの参照ピクチャリストiの導出のために使用されるlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の、アクティブなSPSに含まれるlistIdxがiに等しいref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のリストへのインデックスを指定する。シンタックス要素ref_pic_list_idx[ i ]は、Ceil( Log2( num_ref_pic_lists_in_sps[ i ] ) )ビットによって表される。存在しないとき、ref_pic_list_idx[ i ]の値は、0に等しいと推測される。ref_pic_list_idx[ i ]の値は、0およびnum_ref_pic_lists_in_sps[ i ] - 1を含んで0からnum_ref_pic_lists_in_sps[ i ] - 1までの範囲内にある。ref_pic_list_sps_flag[ i ]が1に等しく、num_ref_pic_lists_in_sps[ i ]が1に等しいとき、ref_pic_list_idx[ i ]の値は、0に等しいと推測される。ref_pic_list_sps_flag[ i ]が1に等しく、rpl1_idx_present_flagが0に等しいとき、ref_pic_list_idx[ 1 ]の値は、ref_pic_list_idx[ 0 ]に等しいと推測される。
【0100】
変数RplsIdx[ i ]が、以下のように導出される。
RplsIdx[ i ] = ref_pic_list_sps_flag[ i ] ? ref_pic_list_idx[ i ] :
num_ref_pic_lists_in_sps[ i ] (7-40)
slice_poc_lsb_lt[ i ][ j ]は、ピクチャ順序カウントの値を第iの参照ピクチャリストの第jのLTRPエントリのMaxPicOrderCntLsbで割った余りを指定する。slice_poc_lsb_lt[ i ][ j ]シンタックス要素の長さは、log2_max_pic_order_cnt_lsb_minus4 + 4ビットである。
【0101】
変数PocLsbLt[ i ][ j ]が、以下のように導出される。
PocLsbLt[ i ][ j ] = ltrp_in_slice_header_flag[ i ][ RplsIdx[ i ] ] ? (7-41)
slice_poc_lsb_lt[ i ][ j ] : rpls_poc_lsb_lt[ listIdx ][ RplsIdx[ i ] ][ j ]
delta_poc_msb_present_flag[ i ][ j ]は、delta_poc_msb_cycle_lt[ i ][ j ]が存在することを指定するために1に等しいように設定され得る。delta_poc_msb_present_flag[ i ][ j ]は、delta_poc_msb_cycle_lt[ i ][ j ]が存在しないことを指定するために0に等しいように設定され得る。prevTid0Picが、0に等しいTemporalIdを有し、ランダムアクセススキップリーディング(RASL: random access skipped leading)またはランダムアクセス復号可能リーディング(RADL: random access decodable leading)ピクチャではない、復号順で前のピクチャであるものとする。setOfPrevPocValsが、以下、すなわち、prevTid0PicのPicOrderCntVal、prevTid0PicのRefPicList[ 0 ]のエントリおよびRefPicList[ 1 ]のエントリによって参照される各ピクチャのPicOrderCntVal、ならびに復号順でprevTid0Picの後に続き、復号順で現在のピクチャの前にある各ピクチャのPicOrderCntValを含むセットであるものとする。値をMaxPicOrderCntLsbで割った余りがPocLsbLt[ i ][ j ]に等しいsetOfPrevPocVals内の2つ以上の値が存在するとき、delta_poc_msb_present_flag[ i ][ j ]の値は、1に等しいべきである。
【0102】
delta_poc_msb_cycle_lt[ i ][ j ]は、変数FullPocLt[ i ][ j ]の値を以下の通りに指定する。
if( j == 0 )
deltaMsbCycle[ i ][ j ] = delta_poc_msb_cycle_lt[ i ][ j ]
else (7-42)
deltaMsbCycle[ i ][ j ] = delta_poc_msb_cycle_lt[ i ][ j ] + deltaMsbCycle[ i ][ j - 1 ]
FullPocLt[ i ][ RplsIdx[ i ] ][ j ] = PicOrderCntVal - deltaMsbCycle[ i ][ j ] * MaxPicOrderCntLsb - ( PicOrderCntVal & ( MaxPicOrderCntLsb - 1 ) ) + PocLsbLt[ i ][ j ]
【0103】
delta_poc_msb_cycle_lt[ i ][ j ]の値は、0および2(32 - log2_max_pic_order_cnt_lsb_minus4 - 4)を含んで0から2(32 - log2_max_pic_order_cnt_lsb_minus4 - 4)までの範囲内にあるべきである。存在しないとき、delta_poc_msb_cycle_lt[ i ][ j ]の値は、0に等しいと推測される。num_ref_idx_active_override_flagは、シンタックス要素num_ref_idx_active_minus1[ 0 ]がPおよびBスライスについて存在することと、シンタックス要素num_ref_idx_active_minus1[ 1 ]がBスライスについて存在することとを指定するために1に等しいように設定され得る。num_ref_idx_active_override_flagは、シンタックス要素num_ref_idx_active_minus1[ 0 ]およびnum_ref_idx_active_minus1[ 1 ]が存在しないことを指定するために0に等しいように設定され得る。存在しないとき、num_ref_idx_active_override_flagの値は、1に等しいと推測される。num_ref_idx_active _minus1[ i ]は、変数NumRefIdxActive[ i ]の導出のために使用される。num_ref_idx_active_minus1[ i ]の値は、0および14を含んで0から14までの範囲内にありうる。0または1に等しいiについて、現在のスライスがBスライスであり、num_ref_idx_active_override_flagが1に等しく、num_ref_idx_active_minus1[ i ]が存在しないとき、num_ref_idx_active_minus1[ i ]は、0に等しいと推測される。現在のスライスがPスライスであり、num_ref_idx_active_override_flagが1に等しく、num_ref_idx_active_minus1[ 0 ]が存在しないとき、num_ref_idx_active_minus1[ 0 ]は、0に等しいと推測される。
【0104】
変数NumRefIdxActive[ i ]は、以下の通りに導出される。
for( i = 0; i < 2; i++ ) {
if( slice_type == B || ( slice_type == P && i == 0 ) ) {
if( num_ref_idx_active_override_flag )
NumRefIdxActive[ i ] = num_ref_idx_active_minus1[ i ] + 1 (7-43)
else {
if( num_ref_entries[ i ][ RplsIdx[ i ] ] >= num_ref_idx_default_active_minus1[ i ] + 1 )
NumRefIdxActive[ i ] = num_ref_idx_default_active_minus1[ i ] + 1
else
NumRefIdxActive[ i ] = num_ref_entries[ i ][ RplsIdx[ i ] ]
}
} else // slice_type == I || ( slice_type == P && i == 1 )
NumRefIdxActive[ i ] = 0
}
【0105】
NumRefIdxActive[ i ] - 1の値は、スライスを復号するために使用され得る参照ピクチャリストiについての最大の参照インデックスを指定する。NumRefIdxActive[ i ]の値が0に等しいとき、参照ピクチャリストiについての参照インデックスは、スライスを復号するために使用されない可能性がある。現在の復号されたピクチャが現在のスライスの唯一の参照ピクチャであることを指定する変数CurrPicIsOnlyRefは、以下の通りに導出される。
CurrPicIsOnlyRef = sps_cpr_enabled_flag && ( slice_type == P ) && (7-44)
( num_ref_idx_active_minus1[ 0 ] == 0 )
【0106】
例示的な参照ピクチャリスト構造のセマンティクスは、以下の通りである。ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造は、SPS内またはスライスヘッダ内に存在する可能性がある。シンタックス構造がスライスヘッダに含まれるのかまたはSPSに含まれるのかに応じて、以下のことが適用される。スライスヘッダ内に存在する場合、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造は、現在のピクチャ(たとえば、スライスを含むピクチャ)の参照ピクチャリストのlistIdxを指定する。そうでない(たとえば、SPS内に存在する)場合、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造は、参照ピクチャリストlistIdxの候補を指定し、セマンティクスにおける現在のピクチャという用語は、1)SPSに含まれるref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のリストへのインデックスに等しいref_pic_list_idx[ listIdx ]を含む1つまたは複数のスライスを有し、2)SPSをアクティブなSPSとして有するCVS内にある各ピクチャを指す。
【0107】
num_ref_entries[ listIdx ][ rplsIdx ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のエントリの数を指定する。num_ref_entries[ listIdx ][ rplsIdx ]の値は、0およびsps_max_dec_pic_buffering_minus1 + 14を含んで0からsps_max_dec_pic_buffering_minus1 + 14までの範囲内にあるべきである。ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のLTRPエントリのPOC LSBがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造内に存在することを指定するために0に等しいように設定され得る。ltrp_in_slice_header_flag[ listIdx ][ rplsIdx ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のLTRPエントリのPOC LSBがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造内に存在しないことを指定するために1に等しいように設定され得る。st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の第iのエントリが短期参照ピクチャ(STRP)エントリであることを指定するために1に等しいように設定され得る。st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の第iのエントリがLTRPエントリであることを指定するために0に等しいように設定され得る。存在しないとき、st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ]の値は、1に等しいと推測される。
【0108】
変数NumLtrpEntries[ listIdx ][ rplsIdx ]は、以下の通りに導出され得る。
for( i = 0, NumLtrpEntries[ listIdx ][ rplsIdx ] = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ )
if( !st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) (7-86)
NumLtrpEntries[ listIdx ][ rplsIdx ]++
【0109】
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]は、第iのエントリがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の最初のSTRPエントリであるとき、現在のピクチャのピクチャ順序カウントの値と第iのエントリによって参照されるピクチャのピクチャ順序カウントの値との間の絶対的な差を指定し、または第iのエントリがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のSTRPエントリであるが最初のSTRPエントリではないとき、第iのエントリによって参照されるピクチャのピクチャ順序カウントの値とref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の前のSTRPエントリによって参照されるピクチャのピクチャ順序カウントの値との間の絶対的な差を指定する。abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]の値は、0および215 - 1を含んで0から215 - 1までの範囲内にありうる。strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]は、シンタックス構造ref_pic_list_struct( listIdx, rplsIdx )の第iのエントリが0以上の値を有することを指定するために1に等しいように設定され得る。strp_entry_sign_flag[ listIdx ][ rplsIdx ]は、シンタックス構造ref_pic_list_struct( listIdx, rplsIdx )の第iのエントリが0未満の値を有することを指定するために0に等しいように設定され得る。存在しないとき、strp_entry_sign_flag[ i ][ j ]の値は、1に等しいと推測される。
【0110】
リストDeltaPocSt[ listIdx ][ rplsIdx ]は、以下の通りに導出される。
for( i = 0; i < num_ref_entries[ listIdx ][ rplsIdx ]; i++ ) {
if( st_ref_pic_flag[ listIdx ][ rplsIdx ][ i ] ) { (7-87)
DeltaPocSt[ listIdx ][ rplsIdx ][ i ] = ( strp_entry_sign_flag[ listIdx ][ rplsIdx ][ i ]) ?
abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ] : 0 - abs_delta_poc_st[ listIdx ][ rplsIdx ][ i ]
}
}
【0111】
rpls_poc_lsb_lt[ listIdx ][ rplsIdx ][ i ]は、ピクチャ順序カウントの値をref_pic_list_struct( listIdx, rplsIdx )シンタックス構造の第iのエントリによって参照されるピクチャのMaxPicOrderCntLsbで割った余りを指定する。rpls_poc_lsb_lt[ listIdx ] [ rplsIdx ][ i ]シンタックス要素の長さは、log2_max_pic_order_cnt_lsb_minus4 + 4ビットである。
【0112】
ビデオ画像をコーディングするために、画像はまず区分化され、区分がビットストリームにコーディングされる。様々なピクチャ区分化方式が、利用可能である。たとえば、画像は、通常のスライス(regular slice)に、従属スライス(dependent slice)に、タイルに、および/または波面並列処理(WPP)によって区分化され得る。簡単にするために、HEVCは、ビデオコーディングのためにスライスをCTBのグループに区分化するときに通常のスライス、従属スライス、タイル、WPP、およびこれらの組合せのみが使用され得るようにエンコーダを制約する。このような区分化は、最大転送単位(MTU)のサイズマッチング、並列処理、および削減されたエンドツーエンドの遅延をサポートするために適用され得る。MTUは、単一のパケットで送信され得るデータの最大量を表す。パケットのペイロードがMTUを超えている場合、そのペイロードは、フラグメンテーションと称されるプロセスによって2つのパケットに分割される。
【0113】
単にスライスとも称される通常のスライスは、ループフィルタリング動作が原因のいくつかの依存関係があるにもかかわらず、同じピクチャ内の他の通常のスライスとは独立して再構築され得る画像の区分化された部分である。各通常のスライスは、送信のために独自のネットワーク抽象化レイヤ(NAL)ユニットにカプセル化される。さらに、スライスの境界をまたぐピクチャ内予測(イントラサンプル予測、動き情報予測、コーディングモード予測)およびエントロピーコーディングの依存関係は、独立した再構築をサポートするために無効化される可能性がある。このような独立した再構築は、並列化をサポートする。たとえば、通常のスライスに基づく並列化は、最小限のプロセッサ間またはコア間通信を使用する。しかし、各通常のスライスは独立しているので、各スライスは、別々のスライスヘッダに関連付けられる。通常のスライスの使用は、各スライスに関するスライスヘッダのビットコストが原因でおよびスライスの境界をまたぐ予測を欠くことが原因で多大なコーディングのオーバーヘッドを招き得る。さらに、通常のスライスは、MTUのサイズの要件に関するマッチングをサポートするために使用され得る。具体的には、通常のスライスが別個のNALユニットにカプセル化され、独立してコーディングされ得るので、各通常のスライスは、スライスを複数のパケットに分割することを避けるためにMTU方式のMTUよりも小さいべきである。したがって、並列化の目的およびMTUのサイズマッチングの目的は、ピクチャ内のスライスのレイアウトに矛盾する要求を課す可能性がある。
【0114】
従属スライスは、通常のスライスに似ているが、短縮されたスライスヘッダを有し、ピクチャ内予測を損なうことなく画像ツリーブロックの境界の区分化を可能にする。したがって、従属スライスは、通常のスライスが複数のNALユニットにフラグメンテーションされることを可能にし、これは、通常のスライスの一部が通常のスライス全体の符号化が完了する前に送出されることを可能にすることによって削減されたエンドツーエンドの遅延をもたらす。
【0115】
タイルは、タイルの列および行を生成する水平方向の境界および垂直方向の境界によって生成される画像の区分化された部分でありうる。タイルは、ラスタスキャン順(右から左および上から下)にコーディングされ得る。CTBのスキャン順は、タイル内に限られる。したがって、第1のタイル内のCTBは、次のタイル内のCTBに進む前にラスタスキャン順にコーディングされる。通常のスライスと同様に、タイルは、ピクチャ内予測の依存関係およびエントロピー復号の依存関係を損なう。しかし、タイルは、個々のNALユニットに含まれない可能性があり、したがって、タイルは、MTUのサイズマッチングのために使用されない可能性がある。各タイルは、1つのプロセッサ/コアによって処理されることができ、近傍タイルを復号する処理ユニット間でピクチャ内予測のために使用されるプロセッサ間/コア間通信は、(近傍タイルが同じスライス内にあるときに)共有されたスライスヘッダを運ぶことならびに再構築されたサンプルおよびメタデータのループフィルタリングに関連する共有を実行することに制限され得る。2つ以上のタイルがスライスに含まれるとき、スライスの最初のエントリポイントのオフセット以外の各タイルに関するエントリポイントのバイトオフセットが、スライスヘッダ内でシグナリングされ得る。各スライスおよびタイルについて、以下の条件、すなわち、1)スライス内のすべてのコーディングされたツリーブロックが同じタイルに属すること、および2)タイル内のすべてのコーディングされたツリーブロックが同じスライスに属することのうちの少なくとも1つが満たされるべきである。
【0116】
WPPにおいて、画像は、CTBの単一の行に区分化される。エントロピー復号および予測メカニズムは、他の行のCTBからのデータを使用しうる。CTBの行の並列的な復号によって、並列処理が可能にされる。たとえば、現在の行は、前の行と並列に復号され得る。しかし、現在の行の復号は、例によっては、1または2CTBだけ前の行の復号プロセスから遅らされる。この遅延は、現在のCTBがコーディングされる前に現在の行内の現在のCTBの上のCTBおよび右上のCTBに関連するデータが利用可能であることを保証する。この手法は、グラフィカルに表現されるとき、波面に見える。このずらされた開始は、最大で画像が含むCTBの行と同じ数のプロセッサ/コアまでの並列化を可能にする。ピクチャ内の近傍のツリーブロックの行の間のピクチャ内予測が許されるので、ピクチャ内予測を可能にするためのプロセッサ間/コア間通信は、多大になり得る。WPPの区分化は、NALユニットのサイズを確かに考慮する。したがって、WPPは、MTUのサイズマッチングをサポートしない。しかしながら、通常のスライスは、所望のMTUのサイズマッチングを実施するために、いくらかのコーディングのオーバーヘッドを伴って、WPPと併せて使用され得る。
【0117】
例において、ビデオコーディングシステムは、スライス、タイル、ブリック(brick)、およびWPPを用いて画像を区分化し得る。ピクチャは、1つまたは複数のタイルの行および1つまたは複数のタイルの列に分割され得る。タイルは、ピクチャの長方形の領域を包含するCTUのシーケンスでありうる。タイルは、1つまたは複数のブリックに分割されえ、ブリックの各々は、タイル内のいくつかのCTUの行を含む。複数のブリックに区分化されないタイルは、ブリックとも称されうる。タイルの純粋なサブセットであるブリックは、タイルと称されないことがある。スライスは、ピクチャのいくつかのタイルまたはタイルのいくつかのブリックを含み得る。ラスタスキャンスライスモードおよび長方形スライスモードを含むスライスの2つのモードが、サポートされ得る。ラスタスキャンスライスモードにおいて、スライスは、ピクチャのタイルのラスタスキャンのタイルのシーケンスを含む。長方形スライスモードにおいて、スライスは、ピクチャの長方形の領域を集合的に形成するピクチャのいくつかのブリックを含み得る。長方形スライス内のブリックは、スライスのブリックのラスタスキャンの順序になっている。single_tile_in_pic_flagは、ピクチャにただ1つのタイルが存在し、単一のタイルがブリックに分割されないことを指定するために1に等しいように設定され得る。entropy_coding_sync_enabled_flagは、WPPが用いられていることを指定するために1に等しいように設定され得る。
【0118】
例示的なピクチャパラメータセットのRBSPのシンタックスは、以下の通りである。
【0119】
【0120】
【0121】
【0122】
一般スライスヘッダのシンタックスの例は、以下の通りである。
【0123】
【0124】
例示的なピクチャパラメータセットのRBSPのセマンティクスは、以下の通りである。single_tile_in_pic_flagは、PPSを参照する各ピクチャ内のただ1つのタイルが存在することを指定するために1に等しいように設定され得る。single_tile_in_pic_flagは、PPSを参照する各ピクチャ内の2つ以上のタイルが存在することを指定するために0に等しいように設定され得る。タイル内にさらなるブリック分割がない場合、タイル全体が、ブリックと称されうる。ピクチャがさらなるブリック分割なしに単一のタイルのみを含むとき、ピクチャは、シングルブリック(single brick)と称されうる。ビットストリームの適合性(conformance)のために、single_tile_in_pic_flagの値は、CVS内でアクティブ化されるすべてのPPSについて同じであるべきである。
【0125】
uniform_tile_spacing_flagは、タイルの列の境界および同様にタイルの行の境界がピクチャに一様に分散され、シンタックス要素tile_cols_width_minus1およびtile_rows_height_minus1を使用してシグナリングされることを指定するために1に等しいように設定され得る。uniform_tile_spacing_flagは、タイルの列の境界および同様にタイルの行の境界がピクチャに一様に分散されることもされないこともあり、シンタックス要素num_tile_columns_minus1およびnum_tile_rows_minus1ならびにシンタックス要素のペアtile_column_width_minus1[ i ]およびtile_row_height_minus1[ i ]のリストを用いてシグナリングされることもされないこともあることを指定するために0に等しいように設定され得る。存在しない場合、uniform_tile_spacing_flagの値は、0に等しいと推測され得る。tile_cols_width_minus1に1を足した値は、uniform_tile_spacing_flagが1に等しいとき、CTBを単位としてピクチャの最も右のタイルの列を除くタイルの列の幅を指定する。tile_cols_width_minus1の値は、0およびPicWidthInCtbsY - 1を含んで0からPicWidthInCtbsY - 1までの範囲内にありうる。存在しないとき、tile_cols_width_minus1の値は、PicWidthInCtbsY - 1に等しいと推測される。
【0126】
tile_rows_height_minus1に1を足した値は、uniform_tile_spacing_flagが1に等しいとき、CTBを単位としてピクチャの一番下のタイルの行を除くタイルの行の高さを指定する。tile_rows_height_minus1の値は、0およびPicHeightInCtbsY - 1を含んで0からPicHeightInCtbsY - 1までの範囲内にある。存在しないとき、tile_rows_width_minus1の値は、PicHeightInCtbsY - 1に等しいと推測される。num_tile_columns_minus1に1を足した値は、uniform_tile_spacing_flagが0に等しいとき、ピクチャを区分化するタイルの列の数を指定する。num_tile_columns_minus1の値は、0およびPicWidthInCtbsY - 1を含んで0からPicWidthInCtbsY - 1までの範囲内にある。single_tile_in_pic_flagが1に等しい場合、num_tile_columns_minus1の値は、0に等しいと推測される。そうでない場合、uniform_tile_spacing_flagが1に等しいとき、num_tile_columns_minus1の値が推測される。num_tile_rows_minus1に1を足した値は、uniform_tile_spacing_flagが0に等しいとき、ピクチャを区分化するタイルの行の数を指定する。num_tile_rows_minus1の値は、0およびPicHeightInCtbsY - 1を含んで0からPicHeightInCtbsY - 1までの範囲内にある。single_tile_in_pic_flagが1に等しい場合、num_tile_rows_minus1の値は、0に等しいと推測される。そうでない場合、uniform_tile_spacing_flagが1に等しいとき、num_tile_rows_minus1の値が推測される。変数NumTilesInPicは、( num_tile_columns_minus1 + 1 ) * ( num_tile_rows_minus1 + 1 )に等しいように設定され得る。
【0127】
single_tile_in_pic_flagが0に等しいとき、NumTilesInPicは、1より大きいはずである。tile_column_width_minus1[ i ]に1を足した値は、CTBを単位として第iのタイルの列の幅を指定する。tile_row_height_minus1[ i ]に1を足した値は、CTBを単位として第iのタイルの行の高さを指定する。brick_splitting_present_flagは、PPSを参照するピクチャの1つまたは複数のタイルが2つ以上のブリックに分割され得ることを指定するために1に等しいように設定され得る。brick_splitting_present_flagは、PPSを参照するピクチャのタイルが2つ以上のブリックに分割されないことを指定するために0に等しいように設定され得る。brick_split_flag[ i ]は、第iのタイルが2つ以上のブリックに分割されることを指定するために1に等しいように設定され得る。brick_split_flag[ i ]は、第iのタイルが2つ以上のブリックに分割されないことを指定するために0に等しいように設定され得る。存在しないとき、brick_split_flag[ i ]の値は、0に等しいと推測される。
【0128】
uniform_brick_spacing_flag[ i ]は、ブリックの境界が第iのタイルに一様に分散され、シンタックス要素brick_height_minus1[ i ]を使用してシグナリングされることを指定するために1に等しいように設定され得る。uniform_brick_spacing_flag[ i ]は、ブリックの境界が第iのタイルに一様に分散される可能性があり、または一様に分散されない可能性があり、シンタックス要素num_brick_rows_minus1[ i ]およびシンタックス要素brick_row_height_minus1[ i ][ j ]のリストを使用してシグナリングされる可能性があり、またはシグナリングされない可能性があることを指定するために0に等しいように設定され得る。存在しないとき、uniform_brick_spacing_flag[ i ]の値は、1に等しいと推測される。brick_height_minus1[ i ]に1を足した値は、uniform_brick_spacing_flag[ i ]が1に等しいとき、CTBを単位として第iのタイル内の一番下のブリックを除くブリックの行の高さを指定する。存在するとき、brick_height_minus1の値は、0およびRowHeight[ i ] - 2を含んで0からRowHeight[ i ] - 2までの範囲内である。存在しないとき、brick_height_minus1[ i ]の値は、RowHeight[ i ] - 1に等しいと推測される。num_brick_rows_minus1[ i ]に1を足した値は、uniform_brick_spacing_flag[ i ]が0に等しいとき、第iのタイルを区分化するブリックの数を指定する。存在するとき、num_brick_rows_minus1[ i ]の値は、0およびRowHeight[ i ] - 1を含んで0からRowHeight[ i ] - 1までの範囲内にありうる。brick_split_flag[ i ]が0に等しい場合、num_brick_rows_minus1[ i ]の値は、0に等しいと推測される。そうでない場合、uniform_brick_spacing_flag[ i ]が1に等しいとき、num_brick_rows_minus1[ i ]の値が推測される。brick_row_height_minus1[ i ][ j ]に1を足した値は、uniform_tile_spacing_flagが0に等しいとき、CTBを単位として第iのタイル内の第jのブリックの高さを指定する。
【0129】
以下の変数が、導出されることが可能であり、uniform_tile_spacing_flagが1に等しいとき、num_tile_columns_minus1およびnum_tile_rows_minus1の値が推測され、0およびNumTilesInPic - 1を含んで0からNumTilesInPic - 1までの範囲の各iについて、uniform_brick_spacing_flag[ i ]が1に等しいとき、num_brick_rows_minus1[ i ]の値が、CTBラスタおよびブリックスキャン変換プロセス(CTB raster and brick scanning conversion process)によって推測される。導出され得る変数は、CTBを単位として第jのタイルの行の高さを指定する、0およびnum_tile_rows_minus1を含んで0からnum_tile_rows_minus1までの範囲のjに対するリストRowHeight[ j ]と、ピクチャのCTBのラスタスキャンにおけるCTBのアドレスからブリックのスキャンにおけるCTBのアドレスへの変換を指定する、0およびPicSizeInCtbsY - 1を含んで0からPicSizeInCtbsY - 1までの範囲のctbAddrRsに対するリストCtbAddrRsToBs[ ctbAddrRs ]と、ブリックのスキャンにおけるCTBのアドレスからピクチャのCTBのラスタスキャンにおけるCTBのアドレスへの変換を指定する、0およびPicSizeInCtbsY - 1を含んで0からPicSizeInCtbsY - 1までの範囲のctbAddrBsに対するリストCtbAddrBsToRs[ ctbAddrBs ]と、ブリックのスキャンにおけるCTBのアドレスからブリックIDへの変換を指定する、0およびPicSizeInCtbsY - 1を含んで0からPicSizeInCtbsY - 1までの範囲のctbAddrBsに対するリストBrickId[ ctbAddrBs ]と、ブリックインデックスからブリック内のCTUの数への変換を指定する、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲のbrickIdxに対するリストNumCtusInBrick[ brickIdx ]と、ブリックIDからブリック内の第1のCTBのブリックのスキャンにおけるCTBのアドレスへの変換を指定する、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲のbrickIdxに対するリストFirstCtbAddrBs[ brickIdx ]を含む。
【0130】
single_brick_per_slice_flagは、このPPSを参照する各スライスが1つのブリックを含むことを指定するために1に等しいように設定され得る。single_brick_per_slice_flagは、このPPSを参照するスライスが2つ以上のブリックを含み得ることを指定するために0に等しいように設定され得る。存在しないとき、single_brick_per_slice_flagの値は、1に等しいと推測される。rect_slice_flagは、各スライス内のブリックがラスタスキャン順になっており、スライス情報がPPS内でシグナリングされないことを指定するために0に等しいように設定され得る。rect_slice_flagは、各スライス内のブリックがピクチャの長方形領域をカバーし、スライス情報がPPS内でシグナリングされることを指定するために1に等しいように設定され得る。single_brick_per_slice_flagが1に等しいとき、rect_slice_flagは、1に等しいと推測される。num_slices_in_pic_minus1に1を足した値は、PPSを参照する各ピクチャ内のスライスの数を指定する。num_slices_in_pic_minus1の値は、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲内にありうる。存在せず、single_brick_per_slice_flagが1に等しいとき、num_slices_in_pic_minus1の値は、NumBricksInPic - 1に等しいと推測される。
【0131】
top_left_brick_idx[ i ]は、第iのスライスの左上の角にあるブリックのブリックインデックスを指定する。jに等しくない任意のiに対して、top_left_brick_idx[ i ]の値は、top_left_brick_idx[ j ]の値に等しくないべきである。存在しないとき、top_left_brick_idx[ i ]の値は、iに等しいと推測される。top_left_brick_idx[ i ]シンタックス要素の長さは、Ceil( Log2( NumBricksInPic )ビットである。bottom_right_brick_idx_delta[ i ]は、第iのスライスの右下の角にあるブリックのブリックインデックスとtop_left_brick_idx[ i ]との間の差を指定する。single_brick_per_slice_flagが1に等しいとき、bottom_right_brick_idx_delta[ i ]の値は、0に等しいと推測される。bottom_right_brick_idx_delta[ i ]シンタックス要素の長さは、Ceil( Log2( NumBricksInPic - top_left_brick_idx[ i ] ) )ビットである。
【0132】
ビットストリームの適合性は、スライスがいくつかの完全なタイルかまたは1つのタイルのサブセットのみかのどちらかを含むことを必要とし得る。第iのスライス内のブリックの数およびスライスへのブリックのマッピングを指定する変数NumBricksInSlice[ i ]およびBricksToSliceMap[ j ]は、以下の通りに導出され得る。
NumBricksInSlice[ i ] = 0
botRightBkIdx = top_left_brick_idx[ i ] + bottom_right_brick_idx_delta[ i ]
for( j = 0; j < NumBricksInPic; j++) {
if( BrickColBd[ j ] >= BrickColBd[ top_left_brick_idx[ i ] ] &&
BrickColBd[ j ] <= BrickColBd[ botRightBkIdx ] &&
BrickRowBd[ j ] >= BrickRowlBd[ top_left_brick_idx[ i ] ] && (7-34)
BrickRowBd[ j ] <= BrickColBd[ botRightBkIdx ] ) {
NumBricksInSlice[ i ]++
BricksToSliceMap[ j ] = i
}
}
【0133】
loop_filter_across_bricks_enabled_flagは、ループ内フィルタリング動作がPPSを参照するピクチャ内のブリックの境界を越えて実行され得ることを指定するために1に等しいように設定され得る。loop_filter_across_bricks_enabled_flagは、ループ内フィルタリング動作がPPSを参照するピクチャ内のブリックの境界を越えて実行されないことを指定するために0に等しいように設定され得る。ループ内フィルタリング動作は、デブロッキングフィルタ、サンプル適応オフセットフィルタ、および適応ループフィルタの動作を含む。存在しないとき、loop_filter_across_bricks_enabled_flagの値は、1に等しいと推測される。loop_filter_across_slices_enabled_flagは、ループ内フィルタリング動作がPPSを参照するピクチャ内のスライスの境界を越えて実行され得ることを指定するために1に等しいように設定され得る。loop_filter_across_slice_enabled_flagは、ループ内フィルタリング動作がPPSを参照するピクチャ内のスライスの境界を越えて実行されないことを指定するために0に等しいように設定され得る。ループ内フィルタリング動作は、デブロッキングフィルタ、サンプル適応オフセットフィルタ、および適応ループフィルタの動作を含む。存在しないとき、loop_filter_across_slices_enabled_flagの値は、0に等しいと推測される。
【0134】
signalled_slice_id_flagは、各スライスに関するスライスIDがシグナリングされることを指定するために1に等しいように設定され得る。signalled_slice_id_flagは、スライスIDがシグナリングされないことを指定するために0に等しいように設定され得る。rect_slice_flagが0に等しいとき、signalled_slice_id_flagの値は、0に等しいと推測される。signalled_slice_id_length_minus1に1を足した値は、スライスヘッダ内の、存在するときにはシンタックス要素slice_id[ i ]と、シンタックス要素slice_addressとを表すために使用されるビット数を指定する。signalled_slice_id_length_minus1は、0および15を含んで0から15までの範囲内にありうる。存在しないとき、signalled_slice_id_length_minus1の値は、Ceil( Log2( num_slices_in_pic_minus1 + 1 ) ) - 1に等しいと推測される。
【0135】
slice_id[ i ]は、第iのスライスのスライスIDを指定する。slice_id[ i ]シンタックス要素の長さは、signalled_slice_id_length_minus1 + 1ビットである。存在しないとき、slice_id[ i ]の値は、0およびnum_slices_in_pic_minus1を含んで0からnum_slices_in_pic_minus1までの範囲内の各iについてiに等しいと推測される。entropy_coding_sync_enabled_flagは、PPSを参照する各ピクチャの各ブリック内のCTBの行の最初のCTBを含むCTUを復号する前にコンテキスト変数(context variable)についての特定の同期プロセスが呼び出され、PPSを参照する各ピクチャの各ブリック内のCTBの行の最初のCTBを含むCTUを復号した後にコンテキスト変数についての特定の記憶プロセスが呼び出されることを指定するために1に等しいように設定され得る。entropy_coding_sync_enabled_flagは、PPSを参照する各ピクチャの各ブリック内のCTBの行の最初のCTBを含むCTUを復号する前にコンテキスト変数についての特定の同期プロセスが呼び出される必要がなく、PPSを参照する各ピクチャの各ブリック内のCTBの行の最初のCTBを含むCTUを復号した後にコンテキスト変数についての特定の記憶プロセスが呼び出される必要がないことを指定するために0に等しいように設定され得る。ビットストリームの適合性は、entropy_coding_sync_enabled_flagの値がCVS内でアクティブ化されるすべてのPPSについて同じであることを必要とし得る。
【0136】
一般スライスヘッダのセマンティクスの例は、以下の通りである。slice_addressは、スライスのスライスアドレスを指定する。存在しないとき、slice_addressの値は、0に等しいと推測される。rect_slice_flagが0に等しい場合、以下が適用される。スライスアドレスは、ブリックIDである。slice_addressの長さは、Ceil( Log2 ( NumBricksInPic ) )ビットである。slice_addressの値は、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲内にありうる。そうでない(rect_slice_flagが1に等しい)場合、以下が適用される。スライスアドレスは、スライスのスライスIDである。slice_addressの長さは、signalled_slice_id_length_minus1 + 1ビットである。signalled_slice_id_flagが0に等しい場合、slice_addressの値は、0およびnum_slices_in_pic_minus1を含んで0からnum_slices_in_pic_minus1までの範囲内にある。そうでない場合、slice_addressの値は、0および2( signalled_slice_id_length_minus1 + 1 ) - 1を含んで0から2( signalled_slice_id_length_minus1 + 1 ) - 1までの範囲内にある。
【0137】
ビットストリームの適合性は、以下の制約が適用されることを必要とし得る。slice_addressの値は、同じコーディングされたピクチャのいかなる他のコーディングされたスライスのNALユニットのslice_addressの値とも等しくないことがある。ピクチャのスライスは、それらのスライスのslice_addressの値の昇順になっていないことがある。ピクチャのスライスの形状は、各ブリックが、復号されるときに、ピクチャの境界を含むかまたは既に復号されたブリックの境界を含むその左の境界全体および上の境界全体を有するようなものであることがある。num_bricks_in_slice_minus1は、存在するとき、スライス内のブリックの数から1を引いた値を指定する。num_bricks_in_slice_minus1の値は、0およびNumBricksInPic - 1を含んで0からNumBricksInPic - 1までの範囲内にありうる。rect_slice_flagが0に等しく、single_brick_per_slice_flagが1に等しいとき、num_bricks_in_slice_minus1の値は、0に等しいと推測される。
【0138】
現在のスライス内のブリックの数を指定する変数NumBricksInCurrSliceおよび現在のスライスの第iのブリックのブリックインデックスを指定するSliceBrickIdx[ i ]は、以下の通りに導出され得る。
if( rect_slice_flag ) {
sliceIdx = 0
while( slice_address != rect_slice_id[ sliceIdx ] )
sliceIdx++
NumBricksInCurrSlice = NumBricksInSlice[ sliceIdx ]
brickIdx = top_left_brick_idx[ sliceIdx ]
botBrickIdx = brickIdx + bottom_right_brick_idx_delta[ brickIdx ]
for( bIdx = 0; brickIdx <= botBrickIdx; brickIdx++ ) (7-38)
if( BricksToSliceMap[ brickIdx ] == sliceIdx )
SliceBrickIdx[ bIdx++ ] = brickIdx
} else {
NumBricksInCurrSlice = num_bricks_in_slice_minus1 + 1
SliceBrickIdx[ 0 ] = slice_address
for( i = 1; i < NumBricksInCurrSlice; i++ )
SliceBrickIdx[ i ] = SliceBrickIdx[ i - 1 ] + 1
}
【0139】
num_entry_point_offsetsは、変数NumEntryPointsを指定するために使用され、変数NumEntryPointsは、以下の通り、現在のスライス内のエントリポイントの数を指定する。
NumEntryPoints = entropy_coding_sync_enabled_flag ? num_entry_point_offsets :
NumBricksInCurrSlice - 1 (7-60)
【0140】
offset_len_minus1に1を足した値は、entry_point_offset_minus1[ i ]シンタックス要素の長さをビット数で指定する。offset_len_minus1の値は、0および31を含んで0から31までの範囲内にありうる。entry_point_offset_minus1[ i ]に1を足した値は、第iのエントリポイントのオフセットをバイト数で指定し、offset_len_minus1足す1ビットによって表される。スライスヘッダに続くスライスデータは、0およびNumEntryPointsを含んで0からNumEntryPointsまでの範囲のサブセットインデックス値を有するNumEntryPoints + 1個のサブセットを含む。スライスデータの最初のバイトは、バイト0と考えられる。存在するとき、コーディングされたスライスのNALユニットのスライスデータの部分に現れるエミュレーション防止バイト(emulation prevention byte)が、サブセットを特定する目的でスライスデータの一部とみなされる。サブセット0は、コーディングされたスライスデータの、バイト0およびバイトentry_point_offset_minus1[ 0 ]を含んでバイト0からバイトentry_point_offset_minus1[ 0 ]までを含み、kが1およびNumEntryPoints - 1を含んで1からNumEntryPoints - 1までの範囲内にあるサブセットkは、コーディングされたスライスデータの、バイトfirstByte[ k ]およびバイトlastByte[ k ]を含んでバイトfirstByte[ k ]からバイトlastByte[ k ]までを含み、firstByte[ k ]およびバイトlastByte[ k ]は、以下のように定義される。
【0141】
【0142】
lastByte[ k ]=firstByte[ k ] + entry_point_offset_minus1[ k ] (7-61)
(NumEntryPointsに等しいサブセットインデックスを有する)最後のサブセットは、コーディングされたスライスデータの残りのバイトを含む。
【0143】
entropy_coding_sync_enabled_flagが0に等しいとき、各サブセットは、同じブリック内にあるスライス内のすべてのCTUのすべてのコーディングされたビットを含む可能性があり、サブセットの数(たとえば、NumEntryPointsの値 + 1)は、スライス内のブリックの数に等しいべきである。entropy_coding_sync_enabled_flagが1に等しいとき、kが0およびNumEntryPointsを含んで0からNumEntryPointsまでの範囲内にある各サブセットkは、ブリックの中のCTUの行内のすべてのCTUのすべてのコーディングされたビットを含むことがあり、サブセットの数(たとえば、NumEntryPointsの値 + 1)は、スライス内のブリックに固有のルマCTUの行の総数に等しいことがある。
【0144】
上述の例は、1つまたは複数の問題を含み得る。たとえば、ref_pic_list_struct( )内のシンタックス要素ltrp_in_slice_header_flagは、long_term_ref_pics_flagが1に等しいことが条件とされ得る。その結果、long_term_ref_pics_flagが1に等しいとき、このフラグは、数が多くなり得る候補参照ピクチャリスト構造の各々に存在する。これは、long_term_ref_pics_flagが1に等しいとき、大きなSPSをもたらし得る。他の例において、シンタックス要素num_ref_idx_active_override_flagに関する条件と対応する推測との組合せが、問題となり得る。たとえば、num_ref_idx_active_override_flagの値は、Iスライスについて1に等しいことがあり、その結果、シンタックス要素num_ref_idx_active_minus1[ 0 ]が、num_ref_entries[ 0 ][ RplsIdx[ 0 ] ]が1よりも大きいIスライスについてシグナリングされることがあり、これ必要でない。他の例においては、WPPが使用されているとき(たとえば、entropy_coding_sync_enabled_flagが1に等しいとき)、シンタックス要素num_entry_point_offsetsが、変数NumEntryPointsの導出のためにシグナリングされ得る。しかし、NumEntryPointsは、このようなシグナリングなしに導出され得る。
【0145】
概して、本開示は、参照ピクチャリストのシグナリングの改善と、WPPが使用されているときのエントリポイントのシグナリングに関する改善とを含む、ビデオコーディングの改善のための技術を説明する。技術の説明は、開発中のVVCに基づくが、他のビデオ/メディアコーデック仕様にも当てはまりうる。
【0146】
上述の問題のうちの1つまたは複数は、以下のように解決され得る。例示的な態様において、フラグがSPSに含められる、ビデオのビットストリームを復号するための方法が開示される。フラグは、参照ピクチャリスト構造の長期参照ピクチャ(LTRP)エントリのPOC LSBがスライスヘッダ内または参照ピクチャリスト構造内に存在するかどうかを指定する。たとえば、フラグは、ltrp_in_slice_header_flagでありうる。他の例示的な態様において、ビットストリームが、参照ピクチャリストのアクティブなエントリの数が明示的にシグナリングされるかどうかを指定するフラグを含み、フラグが存在しないとき、フラグの値が、スライスがIスライスであるときは0に等しいと推測され、スライスがBまたはPスライスであるときは1に等しいと推測される、ビデオのビットストリームを復号するための方法が開示される。たとえば、フラグは、num_ref_idx_active_override_flagである可能性がある。他の例示的な態様において、ビットストリームがピクチャ内の複数のタイルを含み、波面並列処理機能が適用され、スライス内のエントリポイントの数が明示的にシグナリングされる代わりに推測される、ビデオのビットストリームを復号するための方法が開示される。たとえば、エントリポイントの数は、スライスに含まれるすべてのブリック内のCTUの行の数の総和であると推測され得る。さらに他の例において、エントリポイントの数は、変数NumEntryPointsによって表され得る。
【0147】
例示的なシーケンスパラメータセットのRBSPのシンタックスは、以下の通りである。
【0148】
【0149】
一般スライスヘッダのシンタックスの例は、以下の通りである。
【0150】
【0151】
【0152】
参照ピクチャリスト構造のシンタックス
【0153】
【0154】
例示的なシーケンスパラメータセットのRBSPのセマンティクスは、以下の通りである。long_term_ref_pics_flagは、LTRPがCVS内のいかなるコーディングされるピクチャのインター予測にも使用されないことを指定するために0に等しいように設定され得る。long_term_ref_pics_flagは、LTRPがCVS内の1つまたは複数のコーディングされるピクチャのインター予測のために使用されうることを指定するために1に等しいように設定され得る。ltrp_in_slice_header_flagは、各ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のLTRPエントリのPOC LSBがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造内に存在することを指定するために0に等しいように設定され得る。ltrp_in_slice_header_flagは、各ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のLTRPエントリのPOC LSBがref_pic_list_struct( listIdx, rplsIdx )シンタックス構造内に存在しないことを指定するために1に等しいように設定され得る。
【0155】
一般スライスヘッダのセマンティクスの例は、以下の通りである。slice_poc_lsb_lt[ i ][ j ]は、ピクチャ順序カウントの値を第iの参照ピクチャリストの第jのLTRPエントリのMaxPicOrderCntLsbで割った余りを指定する。slice_poc_lsb_lt[ i ][ j ]シンタックス要素の長さは、log2_max_pic_order_cnt_lsb_minus4 + 4ビットである可能性がある。変数PocLsbLt[ i ][ j ]が、以下のように導出され得る。
PocLsbLt[ i ][ j ] = ltrp_in_slice_header_flag ? (7-41)
slice_poc_lsb_lt[ i ][ j ] : rpls_poc_lsb_lt[ listIdx ][ RplsIdx[ i ] ][ j ]
num_ref_idx_active_override_flagは、シンタックス要素num_ref_idx_active_minus1[ 0 ]がPおよびBスライスについて存在することと、シンタックス要素num_ref_idx_active_minus1[ 1 ]がBスライスについて存在することとを指定するために1に等しい可能性がある。num_ref_idx_active_override_flagは、シンタックス要素num_ref_idx_active_minus1[ 0 ]およびnum_ref_idx_active_minus1[ 1 ]が存在しないことを指定するために0に等しいように設定され得る。存在しないとき、num_ref_idx_active_override_flagの値は、以下のように推測され得る。slice_typeがBまたはPに等しい場合、num_ref_idx_active_override_flagの値は、1に等しいと推測され得る。そうでない(slice_typeがIに等しい)場合、num_ref_idx_active_override_flagの値は、0に等しいと推測され得る。
【0156】
例示的な参照ピクチャリスト構造のセマンティクスは、以下の通りである。num_ref_entries[ listIdx ][ rplsIdx ]は、ref_pic_list_struct( listIdx, rplsIdx )シンタックス構造のエントリの数を指定し得る。num_ref_entries[ listIdx ][ rplsIdx ]の値は、0およびsps_max_dec_pic_buffering_minus1 + 14を含んで0からsps_max_dec_pic_buffering_minus1 + 14までの範囲内にありうる。
【0157】
一般スライスヘッダのシンタックスの他の例は、以下の通りである。
【0158】
【0159】
一般スライスヘッダのセマンティクスの例は、以下の通りである。現在のスライス内のエントリポイントの数を指定する変数NumEntryPointsは、以下の通りに導出され得る。
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ ) (7-60)
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice - 1
}
offset_len_minus1に1を足した値は、entry_point_offset_minus1[ i ]シンタックス要素の長さをビット数で指定する。offset_len_minus1の値は、0および31を含んで0から31までの範囲内にありうる。
【0160】
図7は、例示的なビデオコーディングデバイス700の概略図である。ビデオコーディングデバイス700は、本明細書において説明されるように開示された例/実施形態を実装するのに好適である。ビデオコーディングデバイス700は、ダウンストリームポート720、アップストリームポート750、ならびに/またはネットワークを介して上流におよび/もしくは下流にデータを伝達するための送信器および/もしくは受信器を含むトランシーバユニット(Tx/Rx)710を含む。ビデオコーディングデバイス700は、データを処理するための論理ユニットおよび/または中央演算処理装置(CPU)を含むプロセッサ730と、データを記憶するためのメモリ732とをさらに含む。ビデオコーディングデバイス700は、電気、光、またはワイヤレス通信ネットワークを介したデータの通信のためにアップストリームポート750および/またはダウンストリームポート720に結合された電気、光-電気(OE)構成要素、電気-光(EO)構成要素、および/またはワイヤレス通信構成要素も含み得る。ビデオコーディングデバイス700は、ユーザにおよびユーザからデータを伝達するための入力および/または出力(I/O)デバイス760も含み得る。I/Oデバイス760は、ビデオデータを表示するためのディスプレイ、オーディオデータを出力するためのスピーカなどの出力デバイスを含み得る。I/Oデバイス760は、キーボード、マウス、トラックボールなどの入力デバイス、および/またはこのような出力デバイスとインタラクションするための対応するインターフェースも含み得る。
【0161】
プロセッサ730は、ハードウェアおよびソフトウェアによって実装される。プロセッサ730は、1つまたは複数のCPUチップ、コア(たとえば、マルチコアプロセッサとして)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、およびデジタル信号プロセッサ(DSP)として実装され得る。プロセッサ730は、ダウンストリームポート720、Tx/Rx 710、アップストリームポート750、およびメモリ732と通信する。プロセッサ730は、コーディングモジュール714を含む。コーディングモジュール714は、WPP 500および/またはビットストリーム600を含み得る、方法100、800、および900などの本明細書において説明される開示される実施形態を実装する。コーディングモジュール714は、本明細書において説明される任意の他の方法/メカニズムも実装し得る。さらに、コーディングモジュール714は、コーデックシステム200、エンコーダ300、および/またはデコーダ400を実装し得る。たとえば、コーディングモジュール714は、ビットストリームのスライスヘッダ内でnum_entry_point_offsetsパラメータを受信することなくNumEntryPoints 518の値を決定することができる。したがって、コーディングモジュール714は、ビデオデータをコーディングするときにビデオコーディングデバイス700に追加的な機能および/またはコーディングの効率を提供させる。したがって、コーディングモジュール714は、ビデオコーディングデバイス700の機能性を高め、ビデオコーディング技術に固有の問題に対処する。さらに、コーディングモジュール714は、異なる状態へのビデオコーディングデバイス700の転換をもたらす。代替的に、コーディングモジュール714は、メモリ732に記憶され、プロセッサ730によって実行される命令として(たとえば、非一時的媒体に記憶されたコンピュータプログラム製品)として実装され得る。
【0162】
メモリ732は、ディスク、テープドライブ、ソリッドステートドライブ、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、フラッシュメモリ、3値連想メモリ(TCAM: ternary content-addressable memory)、スタティックランダムアクセスメモリ(SRAM)などの1つまたは複数のメモリの種類を含む。メモリ732は、プログラムが実行するために選択されるときにこのようなプログラムを記憶するためならびにプログラムの実行中に読まれる命令およびデータを記憶するためのオーバーフローデータストレージデバイス(over-flow data storage device)として使用され得る。
【0163】
図8は、ビデオシーケンス内のスライスに関するNumEntryPointsをシグナリングすることなくWPP 500を用いて符号化されたビットストリーム600などのビットストリームにビデオシーケンスを符号化する例示的な方法800の流れ図である。方法800は、方法100を実行するときにコーデックシステム200、エンコーダ300、および/またはビデオコーディングデバイス700などのエンコーダによって使用され得る。
【0164】
方法800は、エンコーダが複数のピクチャを含むビデオシーケンスを受信し、たとえば、ユーザ入力に基づいてそのビデオシーケンスをビットストリームに符号化すると決定するときに開始し得る。ステップ801において、エンコーダは、スライスを含むピクチャをビットストリームに符号化し得る。エンコーダは、ピクチャおよび/またはスライスが他のピクチャおよび/またはスライスのためのコーディングされた参照ピクチャおよび/または参照スライスとしてそれぞれ使用されるべきであると決定することもできる。このピクチャ/スライスは、明瞭にする目的で、以下、現在のピクチャ/現在のスライスと称される。参照ピクチャが参照ピクチャとして使用されるべきであると決定すると、参照ピクチャは、復号のためにHRDに転送され得る。エンコーダは、スライスヘッダをビットストリームに符号化し得ることに留意されたい。例において、(たとえば、参照スライスおよび/または現在のスライスに関する)スライスヘッダは、スライス内のエントリポイントのオフセットの数に対応する値を含まない。たとえば、スライスヘッダは、num_entry_point_offsetsパラメータを含まない。ステップ803において、エンコーダのHRDは、ビットストリームかまたはメモリかのどちらかからコーディングされた参照ピクチャの参照スライスを取得する。
【0165】
ステップ805において、エンコーダのHRDは、参照スライスのサイズに基づいてNumEntryPointsを参照スライスに導出する。たとえば、NumEntryPointsは、参照スライスがWPPによってコーディングされるときに導出され得る。例において、NumEntryPointsは、参照スライス内の行のサイズに基づいてさらに導出され得る。例において、NumEntryPointsは、参照スライス内の列のサイズに基づいてさらに導出され得る。例において、NumEntryPointsは、参照スライス内のCTUの数に基づいてさらに導出され得る。例において、NumEntryPointsは、CTUのアドレスなどの参照スライス内のアドレスに基づいてさらに導出され得る。そして、エンコーダのHRDは、NumEntryPointsに基づいて参照スライス内のコーディングされたデータのサブセットに関するオフセットを決定することができる。たとえば、HRDは、オフセットの配列を取得し得る。ついで、HRDは、NumEntryPointsに基づいて配列からいくつかのオフセットを取得することができる。例において、サブセットは、CTUの行である。したがって、取得されたオフセットは、スライス内の各CTUの行についてのエントリポイントを示し得る。
【0166】
たとえば、NumEntryPointsは、以下のように導出され得る。
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice - 1
}
!entropy_coding_sync_enabled_flagは、WPP 500が用いられていないことを示し、NumBricksInCurrSliceは、スライス501内のタイルの数であり、numBrickSpecificCtuRowsInSliceは、スライス501内のCTUの行521~525の数であり、BrickHeight[ SliceBrickIdx[ i ] ]は、CTUの行521~525の高さ(およびしたがってCTUの列516の高さ)である。
【0167】
ステップ807において、エンコーダのHRDは、参照スライス内のコーディングされたデータのサブセットに関するオフセットに基づいてコーディングされた参照ピクチャの参照スライスを復号し得る。たとえば、HRDは、対応するオフセットによって示されたメモリまたはビットストリーム内のビットから始まる各CTUの行に関するデータを取得し得る。ついで、HRDは、取得されたデータに基づいて参照スライスのCTUの各々を復号し得る。
【0168】
ステップ809において、エンコーダは、たとえば、インター予測を使用することによって参照スライスに基づいて現在のスライスをビットストリームに符号化し得る。また、エンコーダは、ステップ811において、デコーダに伝達するためのビットストリームを記憶し得る。
【0169】
図9は、NumEntryPointsがWPP 500を用いて符号化されたビットストリーム600などのビットストリームに含まれないときにビデオシーケンスを復号するためにNumEntryPointsを導出する例示的な方法900の流れ図である。方法900は、方法100を実行しているときにコーデックシステム200、デコーダ400、および/またはビデオコーディングデバイス700などのデコーダによって用いられ得る。
【0170】
方法900は、たとえば、方法800の結果としてビデオシーケンスを表すコーディングされたデータのビットストリームをデコーダが受信し始めるときに開始し得る。ステップ901において、デコーダは、スライスを含むビットストリームを受信する。たとえば、スライスは、WPP 500によってコーディングされたスライス501である可能性がある。ビットストリームは、スライスに関連付けられたスライスヘッダも含む。例において、スライスヘッダは、スライス内のエントリポイントに対応する値を含まない。たとえば、スライスヘッダは、num_entry_point_offsetsパラメータを含まない。
【0171】
ステップ903において、デコーダは、スライスのサイズに基づいてNumEntryPointsをスライスに導出する。たとえば、NumEntryPointsは、スライスがWPPによってコーディングされるときに導出され得る。例において、NumEntryPointsは、スライス内の行のサイズに基づいてさらに導出され得る。例において、NumEntryPointsは、スライス内の列のサイズに基づいてさらに導出され得る。例において、NumEntryPointsは、スライス内のCTUの数に基づいてさらに導出され得る。例において、NumEntryPointsは、CTUのアドレスなどのスライス内のアドレスに基づいてさらに導出され得る。
【0172】
たとえば、NumEntryPointsは、以下のように導出され得る。
if( !entropy_coding_sync_enabled_flag )
NumEntryPoints = NumBricksInCurrSlice - 1
else {
for( numBrickSpecificCtuRowsInSlice = 0, i =0; i < NumBricksInCurrSlice; i++ )
numBrickSpecificCtuRowsInSlice += BrickHeight[ SliceBrickIdx[ i ] ]
NumEntryPoints = numBrickSpecificCtuRowsInSlice - 1
}
ここで、!entropy_coding_sync_enabled_flagは、WPP 500が用いられていないことを示し、NumBricksInCurrSliceは、スライス501内のタイルの数であり、numBrickSpecificCtuRowsInSliceは、スライス501内のCTUの行521~525の数であり、BrickHeight[ SliceBrickIdx[ i ] ]は、CTUの行521~525の高さ(したがってCTUの列516の高さ)である。
【0173】
ステップ905において、デコーダは、ステップ903において導出されたNumEntryPointsに基づいてスライスに含まれるコーディングされたスライスデータのサブセットについてのオフセットを決定し得る。たとえば、デコーダは、オフセットの配列を取得し得る。ついで、デコーダは、ステップ903において導出されたNumEntryPointsに基づいて配列からいくつかのオフセットを取得することができる。たとえば、コーディングされたスライスデータのオフセットは、それぞれ、サブセットインデックス値に関連付けられる可能性があり、このような値は、0からNumEntryPointsまでの範囲にあり得る。そして、デコーダは、NumEntryPointsが到達されるまで、対応するサブセットインデックス値の各オフセットを反復的に取得し得る。例において、サブセットは、CTUの行である。したがって、取得されたオフセットは、スライス内の各CTUの行についてのエントリポイントを示し得る。
【0174】
ステップ907において、デコーダは、コーディングされたスライスデータのサブセットについてのオフセットに基づいてスライスを復号する。たとえば、デコーダは、対応するオフセットによって示されたビットストリーム内のビットから始まる各CTUの行についてのデータを取得し得る。ついで、デコーダは、取得されたデータに基づいてスライスのCTUの各々を復号し得る。そして、デコーダは、ステップ909において、復号されたビデオシーケンスの一部として表示するためにスライスを転送し得る。
【0175】
図10は、NumEntryPointsをシグナリングすることなくWPP 500によってコーディングされたビットストリーム600などのビットストリームにビデオシーケンスをコーディングするための例示的なシステム1000の概略図である。システム1000は、コーデックシステム200、エンコーダ300、デコーダ400、および/またはビデオコーディングデバイス700などのエンコーダおよびデコーダによって実装され得る。さらに、システム1000は、方法100、800、および/または900を実施するときに使用され得る。
【0176】
システム1000は、ビデオエンコーダ1002を含む。ビデオエンコーダ1002は、コーディングされた参照ピクチャの参照スライスを取得するための取得モジュール1001を含む。ビデオエンコーダ1002は、参照スライスのサイズに基づいてNumEntryPointsを参照スライスに導出するための導出モジュール1003をさらに含む。ビデオエンコーダ1002は、NumEntryPointsに基づいて参照スライス内のコーディングされたデータのサブセットについてのオフセットを決定するための決定モジュール1004をさらに含む。ビデオエンコーダ1002は、参照スライス内のコーディングされたデータのサブセットについてのオフセットに基づいてコーディングされた参照ピクチャの参照スライスを復号するためのコーディングモジュール1005をさらに含む。さらに、コーディングモジュール1005は、参照スライスに基づいて現在のスライスをビットストリームに符号化するためのものである。ビデオエンコーダ1002は、デコーダに伝達するためのビットストリームを記憶するための記憶モジュール1006をさらに含む。ビデオエンコーダ1002は、ビットストリームをビデオデコーダ1010に送信するための送信モジュール1007をさらに含む。ビデオエンコーダ1002は、方法800のステップのいずれかを行うようにさらに構成され得る。
【0177】
システム1000は、ビデオデコーダ1010も含む。ビデオデコーダ1010は、スライスを含むビットストリームを受信するための受信モジュール1011を含む。ビデオデコーダ1010は、スライスのサイズに基づいてNumEntryPointsをスライスに導出するための導出モジュール1013をさらに含む。ビデオデコーダ1010は、0からNumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するための決定モジュール1015をさらに含む。ビデオデコーダ1010は、スライス内のコーディングされたデータのサブセットについてのオフセットに基づいてスライスを復号するための復号モジュール1017をさらに含む。ビデオデコーダ1010は、復号されたビデオシーケンスの一部として表示するためのスライスを転送するための転送モジュール1019をさらに含む。ビデオデコーダ1010は、方法900のステップのいずれかを行うようにさらに構成され得る。
【0178】
第1の構成要素は、第1の構成要素と第2の構成要素との間の回線、トレース、または他の媒体を除いて仲介構成要素が存在しないとき、第2の構成要素に直接結合される。第1の構成要素は、第1の構成要素と第2の構成要素との間の回線、トレース、または他の媒体以外の仲介構成要素が存在するとき、第2の構成要素に間接的に結合される。用語「結合される」およびその変化形は、直接的に結合されると間接的に結合されるとの両方を含む。用語「約」の使用は、そうでないことが述べられない限り、後ろの数の±10%を含む範囲を意味する。
【0179】
本明細書において説明された例示的な方法のステップは、必ずしも説明された順序で実行されることを求められず、このような方法のステップの順序は、例示的であるに過ぎないと理解されるべきであることも理解されたい。同様に、さらなるステップが、このような方法に含まれる可能性があり、特定のステップが、本開示の様々な実施形態に一致する方法においては省略されるかまたは組み合わされる可能性がある。
【0180】
いくつかの実施形態が本開示において与えられたが、開示されたシステムおよび方法は、本開示の精神または範囲を逸脱することなく多くの他の特定の形態で具現化される可能性があることが理解されるであろう。これらの例は、例示的であって限定的でないと考えられるべきであり、意図は、本明細書において与えられた詳細に限定されるべきでない。たとえば、様々な要素もしくは構成要素が、組み合わされるかもしくは他のシステムに統合される可能性があり、または特定の特徴が、省略されるかもしくは実装されない可能性がある。
【0181】
加えて、様々な実施形態において分離しているまたは別々であるものとして説明され、図示された技術、システム、サブシステム、および方法は、本開示の範囲を逸脱することなく他のシステム、構成要素、技術、または方法と組み合わされるかまたは統合される可能性がある。変更、置き換え、および改変の他の例が、当業者によって突き止められる可能性があり、本明細書において開示された精神および範囲を逸脱することなくなされる可能性がある。
【符号の説明】
【0182】
100 動作方法
200 コーディングおよびデコーディング(コーデック)システム
201 区分化されたビデオ信号
211 一般コーダ制御構成要素
213 変換・スケーリングおよび量子化構成要素
215 イントラピクチャ推定構成要素
217 イントラピクチャ予測構成要素
219 動き補償構成要素
221 動き推定構成要素
223 復号ピクチャバッファ構成要素
225 ループ内フィルタ構成要素
227 フィルタ制御分析構成要素
229 スケーリングおよび逆変換構成要素
231 ヘッダフォーマットおよびコンテキスト適応2値算術コーディング(CABAC)構成要素
300 ビデオエンコーダ
301 区分化されたビデオ信号
313 変換および量子化構成要素
317 イントラピクチャ予測構成要素
321 動き補償構成要素
323 復号ピクチャバッファ構成要素
325 ループ内フィルタ構成要素
329 逆変換および量子化構成要素
331 エントロピーコーディング構成要素
400 ビデオデコーダ
417 イントラピクチャ予測構成要素
421 動き補償構成要素
423 復号ピクチャバッファ構成要素
425 ループ内フィルタ構成要素
429 逆変換および量子化構成要素
433 エントロピー復号構成要素
500 WPP
501 スライス
511 CTU
512 CTU
516 CTUの列
517 エントリポイント
518 エントリポイントの数(NumEntryPoints)
521 CTUの行
522 CTUの行
523 CTUの行
524 CTUの行
525 CTUの行
600 ビットストリーム
610 SPS
611 ピクチャパラメータセット(PPS)
615 スライスヘッダ
620 画像データ
621 ピクチャ
623 スライス
625 CTU
700 ビデオコーディングデバイス
710 トランシーバユニット(Tx/Rx)
714 コーディングモジュール
720 ダウンストリームポート
730 プロセッサ
732 メモリ
750 アップストリームポート
760 入力および/または出力(I/O)デバイス
800 方法
900 方法
1000 システム
1001 取得モジュール
1002 ビデオエンコーダ
1003 導出モジュール
1004 決定モジュール
1005 コーディングモジュール
1006 記憶モジュール
1007 送信モジュール
1010 ビデオデコーダ
1011 受信モジュール
1013 決定モジュール
1015 決定モジュール
1017 復号モジュール
1019 転送モジュール
【手続補正2】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
デコーダにおいて実装される方法であって、
前記デコーダの受信器によって、
コーディングされたスライスを含むビットストリームを受信するステップと、
前記デコーダのプロセッサによって、前記
コーディングされたスライス内のエントリポイントの数(NumEntryPoints)を導出するステップと、
前記プロセッサによって、0から前記NumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するステップと、
前記プロセッサによって、前記コーディングされたスライスデータの前記サブセットについての前記オフセットに基づいて前記
コーディングされたスライス
に復号
プロセスを適用するステップとを含む、方法。
【請求項2】
前記NumEntryPointsは、前記
コーディングされたスライスが波面並列処理(WPP)によってコーディングされるときに導出される請求項1に記載の方法。
【請求項3】
前記ビットストリームは、スライスヘッダを含み、前記スライスヘッダは、前記
コーディングされたスライス内のエントリポイントのオフセットの数に対応する値を含まない請求項1または2に記載の方法。
【請求項4】
前記NumEntryPointsは、前記
コーディングされたスライス内の行の
数に基づいて導出される請求項1から3のいずれか一項に記載の方法。
【請求項5】
前記NumEntryPointsは、前記
コーディングされたスライス内の列のサイズに基づいて導出される請求項1から4のいずれか一項に記載の方法。
【請求項6】
前記NumEntryPointsは、前記
コーディングされたスライス内のコーディングツリーユニット(CTU)の数に基づいて導出される請求項1から5のいずれか一項に記載の方法。
【請求項7】
前記NumEntryPointsは、前記
コーディングされたスライス内のアドレスに基づいて導出される請求項1から6のいずれか一項に記載の方法。
【請求項8】
前記NumEntryPointsは、前記
コーディングされたスライスのサイズに基づいて導出される請求項1から7のいずれか一項に記載の方法。
【請求項9】
エンコーダにおいて実装される方法であって、
前記エンコーダのプロセッサによって、コーディングされた参照ピクチャの
コーディングされたスライスを取得するステップと、
前記プロセッサによって、前記
コーディングされたスライス内のエントリポイントの数(NumEntryPoints)を導出するステップと、
前記プロセッサによって、前記NumEntryPointsに基づいて前記
コーディングされたスライス内のコーディングされたデータのサブセットについてのオフセットを決定するステップと、
前記プロセッサによって、前記
コーディングされたスライス内の前記コーディングされたデータの前記サブセットについての前記オフセットに基づいて前記コーディングされた参照ピクチャの前記
コーディングされたスライス
に復号
プロセスを適用して、復号された参照ピクチャを生じさせるステップと、
前記プロセッサによって、前記
復号された参照ピクチャに基づいて現在の
ブロックをビットストリームに符号化するステッ
プとを含む、方法。
【請求項10】
前記NumEntryPointsは、前記
コーディングされたスライスが波面並列処理(WPP)によってコーディングされるときに導出される請求項9に記載の方法。
【請求項11】
前記ビットストリームは、スライスヘッダを含み、前記スライスヘッダは、前記
コーディングされたスライス内のエントリポイントのオフセットの数に対応する値を含まない請求項9または10に記載の方法。
【請求項12】
前記NumEntryPointsは、前記
コーディングされたスライス内の行の
数に基づいて導出される請求項9から11のいずれか一項に記載の方法。
【請求項13】
前記NumEntryPointsは、前記
コーディングされたスライス内の列のサイズに基づいて導出される請求項9から12のいずれか一項に記載の方法。
【請求項14】
前記NumEntryPointsは、前記
コーディングされたスライス内のコーディングツリーユニット(CTU)の数に基づいて導出される請求項9から13のいずれか一項に記載の方法。
【請求項15】
前記NumEntryPointsは、前記
コーディングされたスライス内のアドレスに基づいて導出される請求項9から14のいずれか一項に記載の方法。
【請求項16】
前記NumEntryPointsは、前記
コーディングされたスライスのサイズに基づいて導出される請求項9から15のいずれか一項に記載の方法。
【請求項17】
プロセッサと、前記プロセッサに結合された受信器と、前記プロセッサに結合されたメモリと、前記プロセッサに結合された送信器とを含み、前記プロセッサ、前記受信器、前記メモリ、および前記送信器は、請求項1から16のいずれか一項に記載の方法を行うように構成されるビデオコーディングデバイス。
【請求項18】
ビデオコーディングデバイスによる使用のためのコンピュータプログラ
ムを含む非一時的コンピュータ可読媒体であって、前記コンピュータプログラ
ムは、プロセッサによって実行されると前記ビデオコーディングデバイスに請求項1から16のいずれか一項に記載の方法を行わせるように前記非一時的コンピュータ可読媒体に記憶されたコンピュータが実行可能な命令を含む、非一時的コンピュータ可読媒体。
【請求項19】
コーディングされたスライスを含むビットストリームを受信するための受信手段と、
前記
コーディングされたスライス内のエントリポイントの数(NumEntryPoints)を導出するための導出手段と、
0から前記NumEntryPointsまでの範囲のサブセットインデックス値を有するコーディングされたスライスデータのサブセットについてのオフセットを決定するための決定手段と、
前記コーディングされたスライスデータの前記サブセットについての前記オフセットに基づいて前記
コーディングされたスライス
に復号
プロセスを適用するための復号手段とを含むデコーダ。
【請求項20】
請求項1から8のいずれか一項に記載の方法を行うようにさらに構成される請求項19に記載のデコーダ。
【請求項21】
コーディングされた参照ピクチャの
コーディングされたスライスを取得するための取得手段と、
前記
コーディングされたスライス内のエントリポイントの数(NumEntryPoints)を導出するための導出手段と、
前記NumEntryPointsに基づいて前記
コーディングされたスライス内のコーディングされたデータのサブセットについてのオフセットを決定するための決定手段と、
コーディング手段であって、
前記
コーディングされたスライス内の前記コーディングされたデータの前記サブセットについての前記オフセットに基づいて前記コーディングされた参照ピクチャの前記
コーディングされたスライス
に復号
プロセスを適用し、
復号された参照ピクチャを生じさせ、
前記
復号された参照ピクチャに基づいて現在のスライスをビットストリームに符号化するための、コーディング手段
とを含むエンコーダ。
【請求項22】
請求項9から16のいずれか一項に記載の方法を行うようにさらに構成される請求項21に記載のエンコーダ。
【請求項23】
コンピュータまたはプロセッサ上で実行されたとき、請求項1から16のいずれか一項に記載の方法を行うためのプログラムコードを含むコンピュータプログラム。
【国際調査報告】