以下は、視点切替えを開始するための適切な装置および可能な機構をさらに詳細に説明する。これに関して、図1および図2が最初に参照され、図1は、例示の実施形態によるビデオコーディングシステムのブロック図を、本発明の一実施形態に従ってコーデックを組み込むことができる例示的な装置または電子デバイス50の概略ブロック図として示す。図2は、例示の実施形態による装置のレイアウトを示す。図1および図2の要素が、次に説明される。
電子デバイス50は、例えば、無線通信システムの携帯端末またはユーザ機器であり得る。しかしながら、本発明の実施形態は、ビデオ画像のエンコーディングおよびデコーディング、あるいはエンコーディングまたはデコーディングを必要とし得る電子デバイスまたは装置内に実装することができることを理解されよう。
装置50は、デバイスの組込みおよび保護のためにハウジング30を含むことができる。装置50は、さらに、液晶ディスプレイの形態のディスプレイ32を含むことができる。本発明の他の実施形態では、ディスプレイは、画像またはビデオを表示するのに適する任意の好適なディスプレイ技術とすることができる。装置50は、キーパッド34をさらに含むことができる。本発明の他の実施形態では、任意の好適なデータまたはユーザインタフェース機構を利用することができる。例えば、ユーザインタフェースは、タッチセンシティブディスプレイの一部としてバーチャルキーボードまたはデータエントリシステムとして実装することができる。
装置は、マイクロホン36、またはデジタルもしくはアナログ信号入力部とすることができる任意の適切なオーディオ入力部を含むことができる。装置50は、本発明の実施形態では、イヤホン38、スピーカ、またはアナログオーディオもしくはデジタルオーディオ出力接続部のうちの任意の1つとすることができるオーディオ出力デバイスをさらに含むことができる。装置50は、バッテリをさらに含むことができる(または本発明の他の実施形態では、デバイスは、太陽電池、燃料電池、またはクロックワーク発電機(clockwork generator)などの任意の適切な携帯エネルギーデバイスによって電力供給されてもよい)。装置は、画像および/またはビデオを記録または捕捉することができるカメラをさらに含むことができる。装置50は、他のデバイスとの短距離見通し線通信のための赤外線ポートをさらに含むことができる。他の実施形態では、装置50は、任意の適切な短距離通信ソリューション、例えば、ブルートゥース(登録商標)無線接続、USB/ファイヤワイヤ有線接続などをさらに含むことができる。
装置50は、装置50を制御するためのコントローラ56、プロセッサ、またはプロセッサ回路を含むことができる。コントローラ56は、本発明の実施形態では、画像およびオーディオデータの形態の両方のデータを格納することができる、および/またはさらにコントローラ56での実施のための命令を格納することができるメモリ58に接続することができる。コントローラ56は、さらに、オーディオおよび/またはビデオデータのコーディングおよびデコーディングを実行する、またはコントローラによって実行されるコーディングおよびデコーディングを支援するのに適するコーデック回路54に接続することができる。
装置50は、カードリーダ48およびスマートカード46、例えば、ユーザ情報を提供し、ネットワークでのユーザの認証および認定のための認証情報を提供するのに適するUICCおよびUICCリーダをさらに含むことができる。
装置50は、コントローラに接続され、例えば、セルラ通信ネットワーク、無線通信システム、または無線ローカルエリアネットワークとの通信のための無線通信信号を生成するのに適する無線インタフェース回路52を含むことができる。装置50は、無線インタフェース回路52で生成された無線周波数信号を他の装置に送信し、他の装置からの無線周波数信号を受信するために無線インタフェース回路52に接続されたアンテナ44をさらに含むことができる。
装置50は、個々のフレームを記録または検出することができるカメラを含むことができ、個々のフレームは、次いで、処理のためにコーデック54またはコントローラに渡される。装置は、送信および/または格納の前に、別のデバイスからの処理のためのビデオ画像データを受信することができる。装置50は、さらに、無線でまたは有線接続によって、コーディング/デコーディングのための画像を受信することができる。上述の装置50の構造要素は、対応する機能を実行するための手段の例を示す。
図3に関して、本発明の実施形態を利用することができるシステムの一例が示される。システム10は、1つまたは複数のネットワークを通して通信することができる多数の通信デバイスを含む。システム10は、限定はしないが無線セルラ電話ネットワーク(GSM、UMTS、CDMAネットワークなどのような)、IEEE 802.x規格のうちのいずれかによって定義されているものなどの無線ローカルエリアネットワーク(WLAN)、ブルートゥースパーソナルエリアネットワーク、イーサネットローカルエリアネットワーク、トークンリングローカルエリアネットワーク、ワイドエリアネットワーク、およびインターネットを含む有線ネットワークまたは無線ネットワークの任意の組合せを含むことができる。
システム10は、本発明の実施形態を実施するのに適する有線および無線の通信デバイスおよび/または装置50の両方を含むことができる。
例えば、図3に示されるシステムは、携帯電話ネットワーク11と、インターネット28の表現とを示す。インターネット28への接続は、限定はしないが、長距離無線接続と、短距離無線接続と、限定はしないが、電話線、ケーブル線、電力線、および同様の通信経路を含む様々な有線接続とを含むことができる。
システム10に示された例示の通信デバイスは、限定はしないが、電子デバイスまたは装置50、携帯情報端末(PDA)と携帯電話14の組合せ、PDA16、統合メッセージングデバイス(integrated messaging device,IMD)18、デスクトップコンピュータ20、ノートブックコンピュータ22を含むことができる。装置50は、固定式であってもよく、または移動している人によって携帯される携帯式であってもよい。装置50はまた、限定はしないが、自動車、トラック、タクシー、バス、列車、船、飛行機、自転車、オートバイまたは同様の適切な輸送手段を含む輸送手段に配置することができる。
実施形態はまた、セットトップボックス、すなわち、ディスプレイまたは無線機能があることもあり/ないこともあるデジタルTVレシーバに、エンコーダ/デコーダ実装のハードウェア、ソフトウェア、または組合せを有するタブレットまたは(ラップトップ)パーソナルコンピュータ(PC)に、様々なオペレーティングシステムに、およびハードウェア/ソフトウェアベースコーディングを提供するチップセット、プロセッサ、DSP、および/または組込みシステムに実装することができる。
いくつかのまたはさらなる装置は、通話およびメッセージを送受信し、基地局24への無線接続25を介してサービスプロバイダと通信することができる。基地局24は、携帯電話ネットワーク11とインターネット28との間の通信を可能にするネットワークサーバ26に接続され得る。システムは、追加の通信デバイスと、様々なタイプの通信デバイスとを含むことができる。
通信デバイスは、限定はしないが、符号分割多元接続(CDMA)、移動通信用グローバルシステム(GSM)、ユニバーサル移動通信システム(UMTS)、時分割多元接続(TDMA)、周波数分割多元接続(FDMA)、送信制御プロトコル-インターネットプロトコル(TCP-IP)、ショートメッセージサービス(SMS)、マルチメディアメッセージサービス(MMS)、電子メール、インスタントメッセージサービス(IMS)、ブルートゥース、IEEE802.11および同様の無線通信技術を含む様々な送信技術を使用して通信することができる。本発明の様々な実施形態の実施に関わる通信デバイスは、限定はしないが、無線、赤外線、レーザ、ケーブル接続、および任意の適切な接続を含む様々な媒体を使用して通信することができる。
電気通信およびデータネットワークにおいて、チャネルは、物理チャネルまたは論理チャネルのいずれかを参照することができる。物理チャネルは、ワイヤなどの物理的伝送媒体を参照することができ、一方、論理チャネルは、いくつかの論理チャネルを搬送することができる多重媒体を介した論理的接続を参照することができる。チャネルは、1つまたはいくつかのセンダ(または送信器)から1つまたはいくつかの受信器に情報信号、例えば、ビットストリームを搬送するために使用することができる。
ISO/IEC 13818-1または同等のITU-T勧告H.222.0で指定されたMPEG-2トランスポートストリーム(TS)は、オーディオ、ビデオ、および他のメディア、ならびにプログラムメタデータまたは他のメタデータを多重化ストリームで搬送するためのフォーマットである。パケット識別子(PID)が、TS内のエレメンタリストリーム(別名、パケット化エレメンタリストリーム)を識別するために使用される。したがって、MPEG-2 TS内の論理チャネルは、特定のPID値に対応すると考えることができる。
利用可能なメディアファイルフォーマット標準は、ISOベースメディアファイルフォーマット(ISO/IEC 14496-12、ISOBMFFと省略されることがある)、およびISOBMFFから派生したNALユニット構造化ビデオのファイルフォーマット(ISO/IEC14496-15)を含む。
ビデオコーデックは、入力ビデオをストレージ/伝送に適した圧縮表現に変換するエンコーダと、圧縮されたビデオ表現を解凍して表示可能形式に戻すデコーダとからなる。ビデオエンコーダおよび/またはビデオデコーダはまた、互いに別個であってもよく、すなわち、コーデックを形成する必要はない。一般に、エンコーダは、ビデオをよりコンパクトな形式で(すなわち、より低いビットレートで)表すために、オリジナルビデオシーケンスの一部の情報を廃棄する。
典型的なハイブリッドビデオエンコーダ、例えば、ITU-T H.263およびH.264の多くのエンコーダ実施態様は、ビデオ情報を2つのフェーズでエンコードする。第1に、特定のピクチャ区域(または「ブロック」)のピクセル値が、例えば、動き補償手段(以前にコード化されたビデオフレームのうちの1つにおいて、コード化されているブロックに密接に対応する区域を見いだし示すこと)によって、または空間的手段(指定された方法でコード化されているブロックのまわりのピクセル値を使用すること)によって予測される。第2に、予測誤差、すなわち、ピクセルの予測されたブロックとピクセルのオリジナルのブロックとの間の差がコード化される。これは、一般に、指定された変換(例えば、離散コサイン変換(DCT)またはその変形)を使用してピクセル値の差を変換し、係数を量子化し、量子化係数をエントロピーコード化することによって行われる。量子化プロセスの忠実度を変更することによって、エンコーダは、ピクセル表現の精度(ピクチャ品質)と、結果として生じるコード化ビデオ表現のサイズ(ファイルサイズまたは送信ビットレート)との間のバランスを制御することができる。
時間予測では、予測のソースは、以前にデコードされたピクチャ(別名、参照ピクチャ)である。イントラブロックコピー(IBC;別名、イントラブロックコピー予測)では、予測は、時間予測と同様に適用されるが、参照ピクチャは、現在のピクチャであり、以前にデコードされたサンプルのみが予測プロセスおいて参照され得る。インターレイヤまたはインタービュー予測が、時間予測と同様に適用され得るが、参照ピクチャは、それぞれ、別のスケーラブルレイヤまたは別のビューからのデコードされたピクチャである。ある場合には、インター予測は、時間予測のみを参照することができるが、他の場合には、インター予測は、時間予測と、時間予測と同じまたは同様のプロセスで実行されるという条件でイントラブロックコピー、インターレイヤ予測、およびインタービュー予測のうちのいずれかとをまとめて参照することができる。インター予測または時間予測は、時には、動き補償または動き補償予測と呼ばれることがある。
時間予測、動き補償、または動き補償予測と呼ばれることもあるインター予測は、時間的冗長性を低減する。インター予測では、予測のソースは、以前にデコードされたピクチャである。イントラ予測は、同じピクチャ内の隣接するピクセルが相関している可能性が高いことを利用する。イントラ予測は空間ドメインまたは変換ドメインで実行することができる、すなわち、サンプル値または変換係数のいずれかが予測され得る。イントラ予測は、一般に、インター予測が適用されないイントラコーディングで利用される。
コーディング手順の1つの結果は、動きベクトルおよび量子化された変換係数などのコーディングパラメータのセットである。多くのパラメータは、最初に空間的にまたは時間的に隣接するパラメータから予測される場合、より効率的にエントロピーコード化することができる。例えば、動きベクトルを空間的に隣接する動きベクトルから予測することができ、動きベクトル予測子に対する差のみをコード化することができる。コーディングパラメータの予測と、イントラ予測とは、まとめて、インピクチャ予測と呼ばれることがある。
図4は、本発明の実施形態を利用するのに適するビデオエンコーダのブロック図を示す。図4は、2つのレイヤのエンコーダを示しているが、提示されたエンコーダは、3つ以上のレイヤをエンコードするように同様に拡張できることを理解されよう。図4は、ベースレイヤの第1のエンコーダセクション500とエンハンスメントレイヤの第2のエンコーダセクション502とを含むビデオエンコーダの一実施形態を示す。第1のエンコーダセクション500および第2のエンコーダセクション502の各々は、入来ピクチャをエンコードするための類似の要素を含むことができる。エンコーダセクション500、502は、ピクセル予測器302、402、予測誤差エンコーダ303、403、および予測誤差デコーダ304、404を含むことができる。図4は、さらに、インター予測器306、406、イントラ予測器308、408、モードセレクタ310、410、フィルタ316、416、および参照フレームメモリ318、418を含むとしてピクセル予測器302、402の一実施形態を示す。第1のエンコーダセクション500のピクセル予測器302は、インター予測器306(画像と、動き補償された参照フレーム318との間の差を決定する)と、イントラ予測器308(現在のフレームまたはピクチャの既に処理された部分にのみ基づいて画像ブロックの予測を決定する)の両方でエンコードされるべきビデオストリームのベースレイヤ画像300を受け取る。インター予測器とイントラ予測器の両方の出力は、モードセレクタ310に渡される。イントラ予測器308は、2つ以上のイントラ予測モードを有することができる。したがって、各モードは、イントラ予測を実行し、予測された信号をモードセレクタ310に提供することができる。モードセレクタ310は、さらに、ベースレイヤピクチャ300のコピーを受け取る。対応して、第2のエンコーダセクション502のピクセル予測器402は、インター予測器406(画像と、動き補償された参照フレーム418との間の差を決定する)と、イントラ予測器408(現在のフレームまたはピクチャの既に処理された部分にのみ基づいて画像ブロックの予測を決定する)の両方でエンコードされるべきビデオストリームのエンハンスメントレイヤ画像400を受け取る。インター予測器とイントラ予測器の両方の出力は、モードセレクタ410に渡される。イントラ予測器408は、2つ以上のイントラ予測モードを有することができる。したがって、各モードは、イントラ予測を実行し、予測された信号をモードセレクタ410に提供することができる。モードセレクタ410は、さらに、エンハンスメントレイヤピクチャ400のコピーを受け取る。
現在のブロックをエンコードするためにどのエンコーディングモードが選択されるかに応じて、インター予測器306、406の出力、またはオプションのイントラ予測器モードのうちの1つの出力、またはモードセレクタ内の表面エンコーダの出力が、モードセレクタ310、410の出力部に渡される。モードセレクタの出力は、第1の加算デバイス321、421に渡される。第1の加算デバイスは、ベースレイヤピクチャ300/エンハンスメントレイヤピクチャ400からピクセル予測器302、402の出力を減じて、第1の予測誤差信号320、420を生成することができ、測誤差信号320、420は、予測誤差エンコーダ303、403に入力される。
ピクセル予測器302、402は、さらに、予備再構成器339、439から、画像ブロック312、412の予測表現と予測誤差デコーダ304、404の出力338、438の組合せを受け取る。予備再構成画像314、414は、イントラ予測器308、408およびフィルタ316、416に渡され得る。予備表現を受け取るフィルタ316、416は予備表現をフィルタリングし、最終再構成画像340、440を出力することができ、最終再構成画像340、440は、参照フレームメモリ318、418にセーブされ得る。参照フレームメモリ318は、参照画像として使用されるようにインター予測器306に接続することができ、参照画像に対して、将来のベースレイヤピクチャ300が、インター予測操作で比較される。ベースレイヤが、いくつかの実施形態によるエンハンスメントレイヤのインターレイヤサンプル予測および/またはインターレイヤ動き情報予測のためのソースとなるように選択および表示されることを条件として、参照フレームメモリ318はまた、参照画像として使用されるようにインター予測器406に接続することができ、参照画像に対して、将来のエンハンスメントレイヤピクチャ400が、インター予測操作で比較される。その上、参照フレームメモリ418は、参照画像として使用されるようにインター予測器406に接続することができ、参照画像に対して、将来のエンハンスメントレイヤピクチャ400が、インター予測操作で比較される。
第1のエンコーダセクション500のフィルタ316からのフィルタリングパラメータは、ベースレイヤが、いくつかの実施形態によるエンハンスメントレイヤのフィルタリングパラメータを予測するためのソースとなるように選択および指示されることを条件として、第2のエンコーダセクション502に提供され得る。
予測誤差エンコーダ303、403は、変換ユニット342、442と、量子化器344、444とを含む。変換ユニット342、442は、第1の予測誤差信号320、420を変換ドメインに変換する。この変換は、例えば、DCT変換である。量子化器344、444は、変換ドメイン信号、例えば、DCT係数を量子化して、量子化係数を形成する。
予測誤差デコーダ304、404は、予測誤差エンコーダ303、403から出力を受け取り、予測誤差エンコーダ303、403とは反対のプロセスを実行して、デコードされた予測誤差信号338、438を生成し、その信号は、第2の加算デバイス339、439で画像ブロック312、412の予測表現と組み合わされたとき、予備再構成画像314、414を生成する。予測誤差デコーダは、変換信号を再構築するために量子化係数値、例えば、DCT係数を逆量子化する逆量子化器361、461と、再構築済み変換信号に逆変換を実行する逆変換ユニット363、463とを含むと考えることができ、ここで、逆変換ユニット363、463の出力は再構築済みブロックを含む。予測誤差デコーダは、さらなるデコード化情報およびフィルタパラメータに従って再構築済みブロックをフィルタリングすることができるブロッキングフィルタをさらに含むことができる。
エントロピーエンコーダ330、430は、予測誤差エンコーダ303、403の出力を受け取り、適切なエントロピーエンコーディング/可変長エンコーディングを信号に実行して、誤差検出および訂正機能を提供することができる。エントロピーエンコーダ330、430の出力は、例えば、マルチプレクサ508によってビットストリームに挿入され得る。
エントロピーコーディング/デコーディングは、多くの方法で実行することができる。例えば、コンテキストベースコーディング/デコーディングを適用することができ、エンコーダとデコーダの両方は、前にコード化/デコード化されたコーディングパラメータに基づいてコーディングパラメータのコンテキスト状態を変更する。コンテキストベースコーディングは、例えば、コンテキスト適応型バイナリ算術コーディング(CABAC)またはコンテキストベース可変長コーディング(CAVLC)または任意の類似のエントロピーコーディングとすることができる。エントロピーコーディング/デコーディングは、代替としてまたは追加として、ハフマンコーディング/デコーディングまたは指数ゴロムコーディング/デコーディングなどの可変長コーディングスキームを使用して実行され得る。エントロピーコード化ビットストリームまたはコードワードからのコーディングパラメータのデコーディングは、構文解析と呼ばれることがある。
H.264/AVC規格は、国際電気通信連合(ITU-T)の電気通信標準化部門のビデオコーディングエキスパートグループ(VCEG)と国際標準化機構(ISO)/国際電気標準会議(IEC)のムービングピクチャエクスパーツグループ(MPEG)の合同ビデオチーム(JVT)によって開発された。H.264/AVC規格は、両方の標準化母体によって公開されており、ITU-T勧告H.264およびISO/IECの国際規格14496-10と呼ばれ、MPEG-4パート10アドバンスドビデオコーディング(AVC)としても知られている。本仕様の新しい拡張または特徴を統合したH.264/AVC規格の多数のバージョンが存在している。これらの拡張は、スケーラブルビデオコーディング(SVC)およびマルチビュービデオコーディング(MVC)を含む。
高効率ビデオコーディング(H.265/HEVC、別名、HEVC)規格のバージョン1は、VCEGおよびMPEGの合同協力チーム-ビデオコーディング(JCT-VC)によって開発された。この規格は、両方の標準化母体によって公開されており、ITU-T勧告H.265およびISO/IEC国際規格23008-2と呼ばれ、MPEG-Hパート2高効率ビデオコーディング(HEVC)としても知られている。H.265/HEVCのそれ以降のバージョンには、それぞれ、SHVC、MV-HEVC、REXT、3D-HEVC、およびSCCと略記されることがあるスケーラブル、マルチビュー、忠実度範囲、3次元、およびスクリーンコンテンツコーディングの拡張が含まれている。
SHVC、MV-HEVC、および3D-HEVCは、HEVC規格のバージョン2の付録Fに指定されている共通基本仕様を使用する。この共通基本は、例えば、インターレイヤ依存性などのビットストリームのレイヤの特性のうちのいくつかを指定するハイレベルシンタックスおよびセマンティクス、ならびにマルチレイヤビットストリームのインターレイヤ参照ピクチャおよびピクチャ順序カウント導出を含む参照ピクチャリスト構築などのデコーディングプロセスを含む。付録Fは、さらに、HEVCの潜在的な後のマルチレイヤ拡張で使用することができる。SHVCおよび/またはMV-HEVCなどの特定の拡張を参照して、ビデオエンコーダ、ビデオデコーダ、エンコーディング方法、デコーディング方法、ビットストリーム構造、および/または実施形態を以下で説明することができるとしても、それらは、一般に、HEVCのマルチレイヤ拡張に適用可能であり、さらにより一般には、任意のマルチレイヤビデオコーディングスキームに適用可能であることを理解されたい。
バーサタイルビデオコーディング(VVC)(MPEG-Iパート3)、別名ITU H.266は、HEVC/H.265の後継であるMPEGコンソーシアムとITUの合同ビデオ調査チーム(JVET)が開発している画像圧縮規格である。
H.264/AVC、HEVC、VVCのいくつかの重要な定義、ビットストリームおよびコーディング構造、概念、ならびにそれらの拡張の一部が、この節において、実施形態を実施できるビデオエンコーダ、デコーダ、エンコーディング方法、デコーディング方法、およびビットストリーム構造の一例として説明される。様々な実施形態の態様は、H.264/AVC、HEVC、VVC、またはそれらの拡張に限定されず、むしろ、本実施形態を部分的にまたは完全に実現することができる1つの可能な基本の説明が与えられる。VVCまたはそのドラフトバージョンのうちのいずれかが以下で参照される場合はいつでも、説明はVVCドラフト仕様と一致すること、VVCの後のドラフトバージョンおよび最終バージョンでは変更があり得ること、および説明および実施形態をVVCの最終バージョンと一致するように調節できることを理解する必要がある。
ビデオコーディング標準は、ビットストリームシンタックスおよびセマンティクス、ならびにエラーのないビットストリームのデコーディングプロセスを指定することができるが、一方、エンコーディングプロセスは、指定されないことがあり、しかし、エンコーダは、準拠するビットストリームを生成するために必要とされ得る。ビットストリームおよびデコーダの適合性は、仮想参照デコーダ(HRD)を用いて検証することができる。標準は、伝送エラーおよび損失に対処するのに役立つコーディングツールを含むことができるが、エンコーディングでのツールの使用はオプションである場合があり、誤ったビットストリームでのデコーディングプロセスは指定されていない場合がある。
シンタックス要素は、ビットストリームで表されたデータの要素として定義することができる。シンタックス構造は、特定の順序でビットストリーム内に一緒に存在する0個以上のシンタックス要素として定義することができる。
各シンタックス要素は、名前と、コード化された表現の方法の1つの記述子とによって記述することができる。シンタックス要素名がすべてアンダスコア文字とともに小文字で構成されている規則を使用することができる。ビデオデコーダのデコーディングプロセスは、シンタックス要素の値と、前にデコードされたシンタックス要素の値とに従って反応することができる。
H.264/AVC、HEVC、VCC、および例示の実施形態を説明するとき、以下の記述子および/または説明を使用して、各シンタックス要素の構文解析プロセスを指定することができる。
- u(n):nビットを使用する符号なし整数。nがシンタックス表において「v」である場合、ビット数は、他のシンタックス要素の値に応じて変化する。この記述子の構文解析プロセスは、最上位ビットが最初に書き込まれる符号なし整数のバイナリ表現として解釈されるビットストリームから、n個の次のビットによって指定される。
- ue(v):左ビットが先頭である符号なし整数の指数ゴロムコード化(別名、指数ゴロムコード化)シンタックス要素。
指数ゴロムビットストリングは、例えば以下の表を使用して、コード番号(codeNum)に変換することができる。
場合によっては、シンタックス表は、シンタックス要素値から導出される他の変数値を使用することができる。小文字と大文字の混合があり、アンダスコア文字がない変数命名規則を使用することができる。大文字で始まる変数は、現在のシンタックス構造およびすべての依存するシンタックス構造のデコーディングのために導出することができる。大文字で始まる変数は、変数のオリジナルのシンタックス構造に言及することなしに、後のシンタックス構造のデコーディングプロセスで使用することができる。小文字で始まる変数は、それが導出されるコンテキスト内でのみ使用することができる規則を使用することができる。
場合によっては、シンタックス要素値または変数値の「ニーモニック」名が、それらの数値と交換可能に使用される。時には、「ニーモニック」名は、関連する数値なしに使用される。
フラグは、2つの可能な値の0および1の一方をとることができる変数またはシングルビットシンタックス要素として定義することができる。
アレイは、シンタックス要素または変数のいずれかとすることができる。アレイのインデクスづけには、角括弧を使用することができる。1次元アレイは、リストと呼ばれることがある。2次元アレイは、マトリクスと呼ばれることがある。
関数は、名前で記載することができる。関数名は大文字で始まり、アンダスコア文字なしに小文字と大文字の混合を含み、(2つ以上の変数の場合)コンマで区切られた0個以上の変数名(定義のための)または値(使用法のための)を含む左括弧および右括弧で終了する規則を使用することができる。
関数Ceil(x)は、x以上の最小整数を返すように定義することができる。関数Log2(x)は、底を2とするxの対数を返すように定義することができる。
シンタックス要素のデコーディングを記述するためのプロセスを指定することができる。プロセスは、別個の仕様および呼出しを有することができる。現在のシンタックス構造および付随的なシンタックス構造に関連するシンタックス要素および大文字変数はすべてプロセス仕様および呼出しで利用可能であることを指定することができ、プロセス仕様はまた、入力として明確に指定された小文字変数を有することも指定することもできる。各プロセス仕様は、1つまたは複数の出力を明確に指定することができ、その各々は、大文字変数または小文字変数のいずれかであり得る変数とすることができる。
シンタックス、セマンティクス、およびプロセスは、Cプログラミング言語で使用されるものと同様の算術、論理、リレーショナル、ビットユニット、および代入演算子で記述することができる。特に、演算子/は整数除算(切捨てによる)を示すために使用され、演算子%は、モジュラス(すなわち除算の剰余)を示すために使用される。
番号付与および計数の規則は、0から開始することができ、例えば、「第1」は0番目に相当し、「第2」は1番目に相当する、など。
エンコーダへの入力およびデコーダの出力の基本ユニットは、それぞれ、一般に、ピクチャである。エンコーダへの入力として与えられるピクチャは、ソースピクチャと呼ばれることもあり、デコーダによってデコードされたピクチャは、デコードされたピクチャまたは再構築されたピクチャと呼ばれることがある。
ソースピクチャおよびデコードされたピクチャは、各々、1つまたは複数のサンプルアレイ、例えば、サンプルアレイの以下のセットのうちの1つなどで構成される。
- ルーマ(luma,Y)のみ(単色)。
- ルーマおよび2つの彩度(YCbCrまたはYCgCo)。
- 緑、青、および赤(GBR、RGBとしても知られる)。
- 他の指定されていない単色または三刺激色サンプリング(例えば、YZX、XYZとしても知られる)を表すアレイ。
以下では、これらのアレイは、ルーマ(またはLもしくはY)および彩度と呼ばれることがあり、2つの彩度アレイは、使用中の実際の色表現方法に関係なく、CbおよびCrと呼ばれることがある。使用中の実際の色表現方法は、例えば、HEVCなどのビデオユーザビリティ情報(VUI)シンタックスを使用して、例えば、コード化ビットストリームで表示することができる。成分は、3つのサンプルアレイ(ルーマおよび2つの彩度)のうちの1つからのアレイまたは単一のサンプル、または単色フォーマットでピクチャを構成するアレイまたはアレイの単一のサンプルとして定義することができる。
ピクチャは、フレームまたはフィールドのいずれかであると定義することができる。フレームは、ルーマサンプルと、場合によっては対応する彩度サンプルとのマトリクスを含む。フィールドは、ソース信号がインタレースされる場合、フレームの交互のサンプル行のセットであり、エンコーダ入力として使用することができる。彩度サンプルアレイはなくてもよく、(したがって、単色のサンプリングが使用されてもよく)、または彩度サンプルアレイは、ルーマサンプルアレイと比較される場合、サブサンプリングされてもよい。
いくつかの彩度フォーマットは、以下のように要約することができる。
- 単色サンプリングでは、1つのサンプルアレイのみが存在し、それは名目上ルーマアレイと考えることができる。
- 4:2:0サンプリングでは、2つの彩度アレイの各々が、ルーマアレイの半分の高さおよび半分の幅を有する。
- 4:2:2サンプリングでは、2つの彩度アレイの各々が、ルーマアレイと同じの高さおよびルーマアレイの半分の幅を有する。
- 4:4:4サンプリングでは、別個の色平面が使用されない場合、2つの彩度アレイの各々が、ルーマアレイと同じ高さおよび幅を有する。
コーディングフォーマットまたは標準は、サンプルアレイを別個の色平面としてビットストリームにコード化し、別個にコード化された色平面をビットストリームからそれぞれデコードすることを可能にすることができる。別個の色平面が使用される場合、それらの各々は、単色サンプリングによるピクチャとして別々に処理される(エンコーダおよび/またはデコーダによって)。
パーティショニングは、セットの各要素がサブセットの1つの中に正確に存在するように、セットをサブセットに分割することとして定義することができる。ビデオコーディングでは、パーティショニングは、ピクチャの各要素またはピクチャのサブ領域がサブセットの1つの中に正確に存在するように、ピクチャまたはピクチャのサブ領域をサブセットに分割することとして定義することができる。例えば、HEVCエンコーディングおよび/またはデコーディング、および/またはVVCエンコーディングおよび/またはデコーディングに関連するパーティショニングでは、以下の用語を使用することができる。コーディングブロックは、コーディングツリーブロックのコーディングブロックへの分割がパーティショニングとなるように、ある値のNについてサンプルのN×Nブロックとして定義することができる。コーディングツリーブロック(CTB)は、成分のコーディングツリーブロックへの分割がパーティショニングとなるように、ある値のNに対するサンプルのN×Nブロックとして定義することができる。コーディングツリーユニット(CTU)は、ルーマサンプルのコーディングツリーブロック、3つのサンプルアレイを有するピクチャの彩度サンプルの2つの対応するコーディングツリーブロック、または単色ピクチャ、もしくはサンプルをコード化するために使用される3つの別個の色平面およびシンタックス構造を使用してコード化されたピクチャのサンプルのコーディングツリーブロックとして定義することができる。コーディングユニット(CU)は、ルーマサンプルのコーディングブロック、3つのサンプルアレイを有するピクチャの彩度サンプルの2つの対応するコーディングブロック、または単色ピクチャ、もしくはサンプルをコード化するために使用される3つの別個の色平面およびシンタックス構造を使用してコード化されたピクチャのサンプルのコーディングブロックとして定義することができる。最大許容サイズのCUは、LCU(最大コーディングユニット)またはコーディングツリーユニット(CTU)と名前をつけることができ、ビデオピクチャはオーバーラップしないLCUに分割される。
HEVCにおいて、CUは、CU内のサンプルの予測プロセスを定義する1つまたは複数の予測ユニット(PU)と、前記CU内のサンプルの予測誤差コーディングプロセスを定義する1つまたは複数の変換ユニット(TU)とからなる。一般に、CUは、可能なCUサイズの事前定義されたセットから選択可能なサイズをもつサンプルの正方形ブロックからなる。各PUおよびTUは、それぞれ、予測プロセスおよび予測誤差コーディングプロセスの粒度を高めるために、より小さいPUおよびTUにさらにスプリットされ得る。各PUは、そのPU内のピクセルにどの種類の予測が適用されるべきかを定義する、各PUに関連する予測情報(例えば、インター予測PUでは動きベクトル情報、およびイントラ予測PUではイントラ予測方向情報)を有する。
各TUは、前記TU内のサンプルに対する予測誤差デコーディングプロセスを記述する情報(例えば、DCT係数情報を含む)に関連づけることができる。CUごとに予測誤差コーディングが適用されるか否かが、一般に、CUレベルで信号通知される。CUに関連する予測誤差残差がない場合には、前記CUにはTUがないと考えることができる。画像のCUへの分割と、CUのPUおよびTUへの分割とは、一般に、ビットストリームで信号通知され、それにより、デコーダは、これらのユニットの意図された構造を再現することができる。
H.266/VVCのドラフトバージョンでは、以下のパーティショニングが適用される。ここで説明されることは、H.266/VVCの後のドラフトバージョンにおいて、標準が完成するまで、さらに進展することがあることに留意されたい。ピクチャは、HEVCと同様に、CTUにパーティションされるが、最大CTUサイズは128×128に増加している。コーディングツリーユニット(CTU)は、最初に、4分木(別名、クアッドツリー)構造によってパーティションされる。次いで、4分木リーフノードは、マルチタイプツリー構造によってさらにパーティションされ得る。マルチタイプツリー構造には4つのスプリッティングタイプ、すなわち、垂直バイナリスプリッティング、水平バイナリスプリッティング、垂直ターナリスプリッティング、および水平ターナリスプリッティングがある。マルチタイプツリーリーフノードは、コーディングユニット(CU)と呼ばれる。CUが最大変換長さに対して大きすぎる場合を除き、CU、PU、およびTUは、同じブロックサイズを有する。CTUのセグメンテーション構造は、バイナリスプリットおよびターナリスプリットを使用するネストされたマルチタイプツリーをもつクアッドツリーであり、すなわち、最大変換長に対して大きすぎるサイズを有するCUで必要とされる場合を除き、別個のCU、PU、およびTUの概念は使用されない。CUは、正方形または長方形の形状のいずれかを有することができる。
VVC,vなどのいくつかのコーディングフォーマットのエンコーダの出力およびVVCなどのいくつかのコーディングフォーマットのデコーダの入力のための基本ユニットは、ネットワーク抽象化レイヤ(NAL)ユニットである。パケット指向ネットワークによる移送または構造化ファイルへの格納では、NALユニットは、パケットまたは同様の構造にカプセル化され得る。
フレーミング構造を提供しない送信またはストレージ環境のNALユニットストリームには、バイトストリームフォーマットを指定することができる。バイトストリームフォーマットは、各NALユニットの前に開始コードを付けることによってNALユニットを互いに分離する。NALユニット境界の誤検出を避けるために、エンコーダは、開始コードが違ったふうに発生した場合にエミュレーション防止バイトをNALユニットペイロードに追加するバイト指向開始コードエミュレーション防止アルゴリズムを実行する。パケット指向システムとストリーム指向システムと間の直接のゲートウェイ操作を可能にするために、開始コードエミュレーション防止は、バイトストリームフォーマットが使用されているか否かにかかわらず常に実行され得る。
NALユニットは、後に続くデータのタイプの表示と、必要に応じてエミュレーション防止バイトを割り込ませたRBSPの形態でそのデータを含むバイトを含むシンタックス構造として定義することができる。生のバイトシーケンスペイロード(RBSP)は、NALユニットにカプセル化された整数のバイトを含むシンタックス構造として定義することができる。RBSPは、空であるか、またはシンタックス要素を含むデータビットと、それに続くRBSPストップビットと、さらにそれに続く0に等しい0個以上の後続のビットのストリングの形式を有する。
NALユニットは、ヘッダとペイロードとからなる。NALユニットヘッダは、特に、NALユニットのタイプを示す。
NALユニットは、ビデオコーディングレイヤ(VCL)NALユニットと、非VCL NALユニットとに分類することができる。VCL NALユニットは、一般に、コード化されたスライスNALユニットである。
非VCL NALユニットは、例えば、以下のタイプのシーケンスパラメータセット、ピクチャパラメータセット、補足エンハンスメント情報(SEI)NALユニット、アクセスユニットデリミタ、シーケンス終了NALユニット、ビットストリーム終了NALユニット、またはフィラーデータNALユニットのうちの1つとすることができる。パラメータセットが、デコードされたピクチャの再構築に必要とされることがあるが、他の非VCL NALユニットの多くは、デコードされたサンプル値の再構築に必要ではない。
いくつかのコーディングフォーマットは、デコードされるピクチャのデコーディングまたは再構築に必要とされるパラメータ値を搬送できるパラメータセットを指定する。パラメータは、パラメータセットのシンタックス要素として定義することができる。パラメータセットは、パラメータを含み、例えば識別子を使用して、別のシンタックス構造から参照され、または別のシンタックス構造によってアクティブ化され得るシンタックス構造として定義することができる。
いくつかのタイプのパラメータセットが、以下で簡単に説明されるが、他のタイプのパラメータセットが存在してもよく、実施形態が適用されてもよいが、説明されるタイプのパラメータセットに限定されないことを理解する必要がある。コード化ビデオシーケンスを通して変更されないままのパラメータは、シーケンスパラメータセット(SPS)に含まれ得る。デコーディングプロセスによって必要とされることがあるパラメータに加えて、シーケンスパラメータセットは、オプションとして、ビデオユーザビリティ情報(VUI)を含むことができ、ビデオユーザビリティ情報(VUI)は、バッファリング、ピクチャ出力タイミング、レンダリング、およびリソース予約に重要であり得るパラメータを含む。ピクチャパラメータセット(PPS)は、いくつかのコード化ピクチャでは変更されない可能性が高いそのようなパラメータを含む。ピクチャパラメータセットは、1つまたは複数のコード化ピクチャのコード化画像セグメントによって参照され得るパラメータを含むことができる。ヘッダパラメータセット(HPS)は、ピクチャごとに変わる可能性があるそのようなパラメータを含むように提案されている。
ビットストリームはビットのシーケンスとして定義することができ、それは、いくつかのコーディングフォーマットまたは標準では、1つまたは複数のコード化ビデオシーケンスを形成するコード化ピクチャおよび関連データの表現を形成するNALユニットストリームまたはバイトストリームの形態であり得る。同じファイル内、または通信プロトコルの同じ接続内などの同じ論理チャネル内で、第1のビットストリームは、その後に、第2のビットストリームが続くことができる。エレメンタリストリーム(ビデオコーディングのコンテキストの)は、1つまたは複数のビットストリームのシーケンスとして定義することができる。いくつかのコーディングフォーマットまたは標準では、第1のビットストリームの終了は、特定のNALユニットで示すことができ、それは、ビットストリーム終了(EOB)NALユニットと呼ばれることがあり、ビットストリームの最後のNALユニットである。
ビットストリーム部分は、ビットストリームの連続したサブセットとして定義することができる。ある状況では、ビットストリーム部分は、1つまたは複数のシンタックス構造全体からなり、不完全なシンタックス構造がないことを必要とされることがある。他の状況では、ビットストリーム部分は、ビットストリームの任意の連続したセクションも含むことができ、不完全なシンタックス構造を含むことができる。
ビットストリームに沿ったというフレーズ(例えば、ビットストリームに沿ったという表示)またはビットストリームのコード化ユニットに沿ったというフレーズ(例えば、コード化タイルに沿ったという表示)は、特許請求の範囲および記載の実施形態において、「帯域外」データが、それぞれ、ビットストリームまたはコード化ユニットに関連づけられるが含まれないように、送信、信号通知、またはストレージを参照するために使用され得る。ビットストリームに沿ったデコーディングまたはビットストリームのコード化ユニットに沿ったデコーディングなどのフレーズは、ビットストリームまたはコード化ユニットにそれぞれ関連づけられた、言及した帯域外データ(帯域外送信、信号通知、またはストレージから取得され得る)のデコーディングを参照することができる。例えば、ビットストリームが、ISOベースメディアファイルフォーマットに準拠するファイルなどのコンテナファイルに含まれ、特定のファイルメタデータが、ビットストリームを含むトラックのサンプルエントリのボックス、ビットストリームを含むトラックのサンプルグループ、またはビットストリームを含むトラックに関連する時間指定メタデータトラックなどの、メタデータをビットストリームに関連づける方法でファイルに格納される場合、ビットストリームに沿ったというフレーズを使用することができる。
コード化ビデオシーケンス(CVS)は、独立してデコード可能であり、その後に、別のコード化ビデオシーケンスまたはビットストリーム終了が続くデコーディング順序のコード化ピクチャのそのようなシーケンスとして定義することができる。コード化ビデオシーケンスは、追加としてまたは代替として、シーケンス終了(EOS)NALユニットと呼ばれることがある特定のNALユニットがビットストリームに現れると、終了するように指定され得る。
画像は、別々にコード化可能およびデコード可能な画像セグメント(例えば、スライスおよび/またはタイルおよび/またはタイルグループ)にスプリットされ得る。そのような画像セグメントは並列処理を可能にすることができる。本明細書における「スライス」は、デフォルトコーディングまたはデコーディング順序で処理される特定の数の基本コーディングユニットから構成された画像セグメントを参照することができ、一方、「タイル」は、タイルグリッドに沿った長方形画像領域として定義された画像セグメントを参照することができる。タイルグループは、1つまたは複数のタイルのグループとして定義することができる。画像セグメントは、H.264/AVCおよびHEVCおよびVVCのVCL NALユニットなどのビットストリーム内の別個のユニットとしてコード化され得る。コード化画像セグメントは、ヘッダおよびペイロードを含むことができ、ヘッダは、ペイロードのデコーディングに必要なパラメータ値を含む。スライスのペイロードは、スライスデータと呼ばれることがある。
HEVCにおいて、ピクチャは、タイルにパーティションすることができ、タイルは長方形であり、整数のLCUを含む。HEVCにおいて、タイルへのパーティショニングは、規則的なグリッドを形成し、タイルの高さおよび幅は、最大で1LCUだけ互いに異なる。HEVCにおいて、スライスは1つの独立スライスセグメントと、同じアクセスユニット内の次の独立スライスセグメント(もしあれば)に先行するすべての後続の従属スライスセグメント(もしあれば)とに含まれる整数のコーディングツリーユニットであると定義される。HEVCにおいて、スライスセグメントは、タイルスキャンで連続的に順序づけられ、単一のNALユニットに含まれる整数のコーディングツリーユニットであると定義される。各ピクチャのスライスセグメントへの分割は、パーティショニングである。HEVCにおいて、独立スライスセグメントは、スライスセグメントヘッダのシンタックス要素の値が前のスライスセグメントの値から推測されないスライスセグメントであると定義され、従属スライスセグメントは、スライスセグメントヘッダのいくつかのシンタックス要素の値がデコーディング順序での先行する独立スライスセグメントの値から推測されるスライスセグメントであると定義される。HEVCにおいて、スライスヘッダは、現在のスライスセグメントであるか、または現在の従属スライスセグメントに先行する独立スライスセグメントである独立スライスセグメントのスライスセグメントヘッダであると定義され、スライスセグメントヘッダは、スライスセグメント内で表される最初のまたはすべてのコーディングツリーユニットに関連するデータ要素を含むコード化スライスセグメントの一部であると定義される。CUは、タイル内で、またはタイルが使用されない場合にはピクチャ内でLCUのラスタスキャン順序でスキャンされる。LCU内では、CUは、特定のスキャン順序を有する。
その結果、ビデオコーディング標準および仕様は、エンコーダがコード化ピクチャをコード化スライスなどに分割することを可能にすることができる。インピクチャ予測は、一般に、スライス境界を越えては無効にされる。したがって、スライスは、コード化ピクチャを独立にデコード可能なピースにスプリットする方法と見なすことができる。H.264/AVCおよびHEVCでは、インピクチャ予測はスライス境界を越えては無効にされ得る。したがって、スライスは、コード化ピクチャを独立にデコード可能なピースにスプリットする方法と見なすことができ、それゆえに、スライスは、しばしば、送信の基本ユニットと見なされる。多くの場合、エンコーダは、どのタイプのインピクチャ予測がスライス境界を越えて停止されたかをビットストリーム内で示すことができ、デコーダ動作は、例えば、どの予測ソースが利用可能であるかを結論するとき、この情報を考慮する。例えば、隣接するCUが異なるスライスに存在する場合、隣接するCUからのサンプルは、イントラ予測には利用不可能であると見なすことができる。
VVCの最新バージョン、すなわち、VVCドラフト5では、ピクチャのスライス、タイル、およびブリックへのパーティショニングは、以下のように定義される。
ピクチャは、1つまたは複数のタイル行と、1つまたは複数のタイル列とに分割される。ピクチャのタイルへのパーティショニングは、タイル列幅(CTU単位)のリストおよびタイル行高さ(CTU単位)のリストによって特徴づけることができるタイルグリッドを形成する。
タイルは、タイルグリッド、すなわち、ピクチャの長方形領域内の1つの「セル」を包含するコーディングツリーユニット(CTU)のシーケンスである。タイルは、1つまたは複数のブリックに分割され、その各々は、タイル内のいくつかのCTU行からなる。多数のブリックにパーティションされないタイルは、ブリックとも呼ばれる。しかしながら、タイルの真のサブセットであるブリックは、タイルと呼ばれない。
スライスは、ピクチャのいくつかのタイルまたはタイルのいくつかのブリックを含む。スライスは、VCL NALユニットである。
スライスの2つのモード、すなわち、ラスタスキャンスライスモードおよび長方形スライスモードがサポートされる。ラスタスキャンスライスモードでは、スライスは、ピクチャのタイルラスタスキャンでのタイルのシーケンスを含む。長方形スライスモードでは、スライスは、ピクチャの長方形領域を集合的に形成するピクチャのいくつかのブリックを含む。長方形スライス内のブリックは、スライスのブリックラスタスキャンの順序のものである。
ブリックスキャンは、ピクチャをパーティションするCTUの特定の連続する順序づけとして定義することができ、CTUは、ブリックのCTUラスタスキャンで連続的に順序づけられ、タイル内のブリックは、タイルのブリックのラスタスキャンで連続的に順序づけられ、ピクチャのタイルは、ピクチャのタイルのラスタスキャンで連続的に順序づけられる。例えば、コーディング標準において、コード化スライスNALユニットは、各コード化スライスNALユニットの最初のCTUについてブリックスキャン順序でCTUアドレスを増加させる順序でなければならないことが必要とされることがあり、ここで、CTUアドレスは、ピクチャ内のCTUラスタスキャンで増加するように定義することができる。ラスタスキャンは、長方形2次元パターンの1次元パターンへのマッピングとして定義することができ、その結果、1次元パターンの第1のエントリは、左から右にスキャンされた2次元パターンの最初の最上部の行からのものであり、続いて、同様に、パターンの第2の行、第3の行などが(下に向かって)、各々、左から右にスキャンされる。
図5aは、ピクチャのラスタスキャンスライスパーティショニングの一例を示し、ピクチャは、12個のタイルと3個のラスタスキャンスライスとに分割される。図5bは、ピクチャの長方形スライスパーティショニング(18×12CTU)の一例を示し、ピクチャは、24個のタイル(6個のタイル列および4個のタイル行)と、9個の長方形スライスとに分割される。図5cは、タイル、ブリック、および長方形スライスにパーティションされたピクチャの一例を示し、ピクチャは、4個のタイル(2個のタイル列および2個のタイル行)と、11個のブリック(左上のタイルは1個のブリックを含み、右上のタイルは5個のブリックを含み、左下のタイルは2個のブリックを含み、右下のタイルは3個のブリックを含む)と、4個の長方形スライスとに分割される。
タイル、ブリック、および長方形スライスへのパーティショニングは、ピクチャパラメータセット(PPS)で指定される。図6は、タイルおよびブリックへのパーティショニングを表示するためのシンタックスを示し、それは、2つのフェーズで実行される。第1のフェーズとして、タイルグリッド(すなわち、タイル列幅およびタイル行高さ)が提供され、その後、表示されたタイルが、さらに、ブリックにパーティションされる。
タイルグリッドを示す2つのモード、すなわち、均一(1に等しい値を有するシンタックス要素uniform_tile_spacing_flagで示される)と、明示的とがある。均一なタイル間隔では、タイルは、あり得る右端のタイル列を除いて等しい幅と、あり得る一番下のタイル行の除いて等しい高さを有する。明示的なタイル間隔では、タイルの列および行の幅および高さ(それぞれ)は、右端の列および一番下の行(それぞれ)を除いて(CTU単位)示される。
タイルグリッドが表示される方法と同様に、タイルがブリックにスプリットされる方法を表示する2つのモードがある、すなわち、均一または明示的なブリック間隔をタイルごとに表示することができる。信号通知は、タイル行のものと同様である。
長方形スライスが使用される場合、シンタックス要num_slices_in_pic_minus1を含み、それに続くシンタックス構造を使用して、スライスごとに以下が提供される。
- 左上ブリックインデクス(インデクス0を有すると推測される第1のスライスを除いて)、
- 左上ブリックインデクスに対するスライスの右下ブリックの差のブリックインデクス。
図6のシンタックス要素のセマンティクスは、VVCドラフト5では以下のように指定されている。
1に等しいsingle_tile_in_pic_flagは、PPSを参照する各ピクチャには1つのタイルのみが存在することを指定する。0に等しいsingle_tile_in_pic_flagは、PPSを参照する各ピクチャには2つ以上のタイルが存在することを指定する。注記-タイル内にさらなるブリックスプリッティングがない場合、タイル全体がブリックと呼ばれる。ピクチャが、さらなるブリックスプリッティングなしに単一のタイルのみを含む場合、単一のブリックと呼ばれる。single_tile_in_pic_flagの値がCVS内でアクティブ化されるすべてのPPSで同じでなければならないことがビットストリーム準拠の要件である。
1に等しいuniform_tile_spacing_flagは、タイル列境界および同様にタイル行境界が、ピクチャにわたって均一に分散され、シンタックス要素tile_cols_width_minus1およびtile_rows_height_minus1を使用して信号通知されることを指定する。0に等しいuniform_tile_spacing_flagは、タイル列境界および同様にタイル行境界が、ピクチャにわたって均一に分散され、シンタックス要素num_tile_columns_minus1およびnum_tile_rows_minus1と、シンタックス要素ペアtile_column_width_minus1[i]およびtile_row_height_minus1[i]のリストとを使用して信号通知される場合もされない場合もあることを指定する。存在しない場合、uniform_tile_spacing_flagの値は1に等しいと推測される。
tile_cols_width_minus1+1は、uniform_tile_spacing_flagが1に等しい場合、ピクチャの右端のタイル列を除いてタイル列の幅をCTBのユニットで指定する。tile_cols_width_minus1の値は、0からPicWidthInCtbsY-1の範囲(両端を含む)になければならない。存在しない場合、tile_cols_width_minus1の値は、PicWidthInCtbsY-1に等しいと推測される。
tile_rows_height_minus1+1は、uniform_tile_spacing_flagが1に等しい場合、ピクチャの最低部のタイル行を除いて、タイル行の高さをCTBのユニットで指定する。tile_rows_height_minus1の値は、0からPicHeightInCtbsY-1の範囲(両端を含む)になければならない。存在しない場合、tile_rows_height_minus1の値は、PicHeightInCtbsY-1に等しいと推測される。
num_tile_columns_minus1+1は、uniform_tile_spacing_flagが0に等しい場合、ピクチャをパーティションするタイル列の数を指定する。num_tile_columns_minus1の値は、0からPicWidthInCtbsY-1の範囲(両端を含む)になければならない。single_tile_in_pic_flagが1に等しい場合、num_tile_columns_minus1の値は0に等しいと推測される。そうでない場合は、uniform_tile_spacing_flagが1に等しい場合、num_tile_columns_minus1の値は、CTBラスタスキャニング、タイルスキャニング、およびブリックスキャニングプロセスで指定されたように推測される。
num_tile_rows_minus1+1は、uniform_tile_spacing_flagが0に等しい場合、ピクチャをパーティションするタイル行の数を指定する。num_tile_rows_minus1の値は、0からPicHeightInCtbsY-1の範囲(両端を含む)になければならない。single_tile_in_pic_flagが1に等しい場合、num_tile_rows_minus1の値は0に等しいと推測される。そうでない場合は、uniform_tile_spacing_flagが1に等しい場合、num_tile_rows_minus1の値は、CTBラスタスキャニング、タイルスキャニング、およびブリックスキャニングプロセスで指定される通りに推測される。変数NumTilesInPicは、(num_tile_columns_minus1+1) * (num_tile_rows_minus1+1)に等しく設定される。single_tile_in_pic_flagが0に等しい場合、NumTilesInPicは1より大きくなければならない。
tile_column_width_minus1[i]+1は、i番目のタイル列の幅をCTBのユニットで指定する。
tile_row_height_minus1[i]+1は、i番目のタイル行の高さをCTBのユニットで指定する。
1に等しいbrick_splitting_present_flagは、PPSを参照するピクチャの1つまたは複数のタイルが2つ以上のブリックに分割され得ることを指定する。0に等しいbrick_splitting_present_flagは、PPSを参照するピクチャのタイルが2つ以上のブリックに分割されないことを指定する。
1に等しいbrick_split_flag[i]は、i番目のタイルが2つ以上のブリックに分割されることを指定する。0に等しいbrick_split_flag[i]は、i番目のタイルが、2つ以上のブリックに分割されないことを指定する。存在しない場合、brick_split_flag[i]の値は0に等しいと推測される。
1に等しいuniform_brick_spacing_flag[i]は、水平ブリック境界が、i番目のタイルにわたって均一に分散され、シンタックス要素brick_height_minus1[i]を使用して信号通知されることを指定する。0に等しいuniform_brick_spacing_flag[i]は、水平ブリック境界が、i番目のタイルにわたって均一に分散され、シンタックス要num_brick_rows_minus1[i]と、シンタックス要素brick_row_height_minus1[i][j]のリストとを使用して信号通知される場合もされない場合もあることを指定する。存在しない場合、uniform_brick_spacing_flag[i]の値は1に等しいと推測される。
brick_height_minus1[i]+1は、uniform_brick_spacing_flag[i]が1に等しい場合、i番目のタイルの最低部ブリックを除いて、ブリック行の高さをCTBのユニットで指定する。存在する場合、 brick_height_minus1の値は、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]の値は、1から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]
の値は、CTBラスタスキャニング、タイルスキャニング、およびブリックスキャニングプロセスで指定される通りに推測される。
brick_row_height_minus1[i][j]+1は、uniform_tile_spacing_flagが0に等しい場合、i番目のタイルのj番目のブリックの高さをCTBのユニットで指定する。
以下の変数が導出され、uniform_tile_spacing_flagが1に等しい場合、num_tile_columns_minus1およびnum_tile_rows_minus1の値が推測され、0から NumTilesInPic-1の範囲(両端を含む)の各iに対して、uniform_brick_spacing_flag[i]が1に等しい場合、num_brick_rows_minus1[i]の値は、CTBラスタスキャニング、タイルスキャニング、およびブリックスキャニングプロセスを呼び出すことによって推測され、
- j番目のタイル行の高さをCTBのユニットで指定する、0からnum_tile_rows_minus1の範囲(両端を含む)のjに対するリストRowHeight[j]、
- ピクチャのCTBラスタスキャンのCTBアドレスからブリックスキャンのCTBアドレスへの変換を指定する、0からPicSizeInCtbsY-1の範囲(両端を含む)のctbAddrRsに対するリストCtbAddrRsToBs[ctbAddrRs]、
- ブリックスキャンのCTBアドレスからピクチャのCTBラスタスキャンのCTBアドレスへの変換を指定する、0からPicSizeInCtbsY-1の範囲(両端を含む)のctbAddrBsに対するリストCtbAddrBsToRs[ctbAddrBs]、
- ブリックスキャンのCTBアドレスからブリックIDへの変換を指定する、0からPicSizeInCtbsY-1の範囲(両端を含む)のctbAddrBsに対するリストBrickId[ctbAddrBs]、
- ブリックインデクスからブリック内のCTUの数への変換を指定する、0からNumBricksInPic-1の範囲(両端を含む)のbrickIdxに対するリストNumCtusInBrick[brickIdx]、
- ブリックIDからブリックの第1のCTBのブリックスキャンのCTBアドレスへの変換を指定する、0からNumBricksInPic-1の範囲(両端を含む)のbrickIdxに対するリストFirstCtbAddrBs[brickIdx]。
1に等しいsingle_brick_per_slice_flagは、このPPSを参照する各スライスが1つのブリックを含むことを指定する。0に等しいsingle_brick_per_slice_flagは、このPPSを参照するスライスが2つ以上のブリックを含むことができることを指定する。存在しない場合、single_brick_per_slice_flagの値は1に等しいと推測される。
0に等しいrect_slice_flagは、各スライス内のブリックがラスタスキャン順序になっており、スライス情報がPPSで信号通知されないことを指定する。1に等しいrect_slice_flagは、各スライス内のブリックがピクチャの長方形領域を包含し、スライス情報がPPSで信号通知されることを指定する。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の範囲(両端を含む)になければならない。存在せず、single_brick_per_slice_flagが1に等しい場合、num_slices_in_pic_minus1の値は、NumBricksInPic-1に等しいと推測される。
top_left_brick_idx[i]は、i番目のスライスの左上隅に配置されたブリックのブリックインデクスを指定する。top_left_brick_idx[i]の値は、iがjに等しくない場合、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]))ビットである。
スライスが、いくつかの完全なタイル、または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 ] >= BrickRowBd[ top_left_brick_idx[ i ] ] &&
BrickRowBd[ j ] <= BrickColBd[ botRightBkIdx ] ) {
NumBricksInSlice[ i ]++
BricksToSliceMap[ j ] = i
}
}
したがって、タイルおよびブリックパーティショニングを信号通知するために、かなり複雑なシンタックス構造が意図される。それは、例えば、シンタックス要素の数、シンタックスの行、操作モードの数(すなわち、タイルとブリック両方に対する別個の均一モードと明示的モード、および別々に示されたタイルの境界とブリックの境界)、ならびに信号通知のビット数に関して多くの点で最適に及ばない。
次に、タイルおよびブリックパーティショニングを信号通知するための改善された方法が紹介される。
図7に示される第1の態様よるエンコードするための方法は、タイル列の表示、および1つまたは複数のタイル列のブリック高さの表示を含むビットストリームを一度にエンコードする(700)こと、あるいはビットストリームにおいてまたはビットストリームに沿って、タイル列の表示、および1つまたは複数のタイル列のブリック高さの表示を一度にエンコードする(700)ことと、ピクチャを通じて整列されたブリック行を検出する際に、潜在的なタイル行を推測する(702)ことと、潜在的なタイル行の境界がタイル行の境界であるかどうかを推測するかまたは表示する(704)ことと、表示されたタイル列、表示または推測されたタイル行、および表示されたブリック高さを使用して、1つまたは複数のピクチャをビットストリームにエンコードする(706)ことであり、1つまたは複数のピクチャが、表示されたタイル列および表示または推測されたタイル行に沿ってタイルのグリッドにパーティションされ、タイルのグリッド内のタイルが、整数のコーディングツリーユニットを含み、1つまたは複数のブリックにパーティションされ、ブリックが、タイル内に整数のコーディングツリーユニットの行を含む、エンコードする(706)こととを含む。
第1の態様に従ってデコードするための方法は、ビットストリームからまたそれに沿って、タイル列の表示と1つまたは複数のタイル列のブリック高さの表示とを一度にデコードすることと、ピクチャを通じて整列されたブリック行を検出する際に、潜在的なタイル行を推測することと、潜在的なタイル行の境界がタイル行の境界であるかどうかを推測するかまたはデコードすることと、表示されたタイル列、表示または推測されたタイル行、および表示されたブリック高さを使用して、ビットストリームから1つまたは複数のピクチャをデコードすることであり、1つまたは複数のピクチャが、表示されたタイル列および表示または推測されたタイル行に沿ってタイルのグリッドにパーティションされ、タイルのグリッド内のタイルが、整数のコーディングツリーユニットを含み、1つまたは複数のブリックにパーティションされ、ブリックが、タイル内に整数のコーディングツリーユニットの行を含む、デコードすることとを含む。
したがって、タイル列およびタイル列ごとのブリック高さは、タイル行の高さを除いて、エンコーダによって表示され、および/またはデコーダによってデコードされる。潜在的なタイル行境界は、ブリック境界がピクチャを通じて整列されている(水平に)境界であると推測される。したがって、特定の潜在的なタイル行境界では、前記潜在的なタイル行境界がタイル行境界であると推測することができる。潜在的なタイル行境界がタイル行境界であるという推測は、シンタックス構造で利用可能な他の情報、またはシンタックス構造からの特定の情報の欠如、例えば、特定のフラグの欠如からなされる結論に基づくことができる。
代替として、潜在的なタイル行境界がタイル行境界であるかどうかをエンコーダで表示するか、および/またはデコーダでデコードすることができる。表示は、例えば、シンタックス構造に存在する1つまたは複数のフラグに基づくことができる。
したがって、タイル列およびタイル列ごとのブリック高さのみを表示し、潜在的なタイル行を推測することによって、パーティショニングは、タイル行の高さを信号通知することなく信号通知され得る。その結果として、コーディング効率が改善され、前記信号通知に必要なビットレートが低減される。
以下では、第1の態様、すなわち、タイル列およびタイル列ごとのブリック高さを表示し、タイル行の高さを除くためのシンタックスおよびセマンティクスのいくつかの例示的な実施形態が提供される。実施形態は、シンタックスおよびセマンティクスに準拠するビットストリーム部分を生成するエンコーディングと、シンタックスおよびセマンティクスに従ってビットストリーム部分をデコードするデコーディングとに等しく適用可能である。
シンタックスおよびセマンティクスの実施例1
1に等しいuniform_tile_col_spacing_flagは、タイル列境界が、ピクチャにわたって均一に分散され、シンタックス要素tile_cols_width_minus1を使用して信号通知されることを指定する。0に等しいuniform_tile_spacing_flagは、タイル列境界が、ピクチャにわたって均一に分散される場合もされない場合もあり、シンタックス要素num_tile_columns_minus1およびシンタックス要素tile_column_width_minus1[i]のリストを使用して信号通知されることを指定する。存在しない場合、uniform_tile_col_spacing_flagの値は1に等しいと推測される。
tile_cols_width_minus1、num_tile_columns_minus1、およびtile_column_width_minus1[i]のセマンティクスは、VVCドラフト5における同じ名前をもつシンタックス要素のセマンティクスと全く同じように指定される。
uniform_tile_col_spacing_flagが1に等しい場合、NumTileColsInPicは、PicWidthInCtbsY/(tile_cols_width_minus1+1)+PicWidthInCtbsY % (tile_cols_width_minus1+1)に等しく設定される。そうでない場合は、NumTileColsInPicは、num_tile_columns_minus1+1に等しく設定される。
1に等しいuniform_brick_spacing_flag[i]は、水平ブリック境界が、i番目のタイル列にわたって均一に分散され、シンタックス要素brick_height_minus1[i]を使用して信号通知されることを指定する。0に等しいuniform_brick_spacing_flag[i]は、水平のブリック境界が、i番目のタイル列にわたって均一に分散され、シンタックス要素num_brick_rows_minus1[i]およびシンタックス要素brick_row_height_minus1[i][j]のリストを使用して信号通知される場合もされない場合もあることを指定する。存在しない場合、uniform_brick_spacing_flag[i]の値は、1に等しいと推測される。
brick_height_minus1[i]+1は、uniform_brick_spacing_flag[i]が1に等しい場合、i番目のタイル列の最低部ブリックを除いて、ブリック行の高さをCTBのユニットで指定する。
num_brick_rows_minus1[i]+1は、uniform_brick_spacing_flag[i]が0に等しい場合、i番目のタイル列をパーティションするブリックの数を指定する。
brick_row_height_minus1[i][j]+1は、uniform_tile_spacing_flagが0に等しい場合、i番目のタイル列のj番目のブリックの高さをCTBのユニットで指定する。
シンタックスおよびセマンティクスの実施例2
実施例2は、実施例1と似ているが、追加として、現在のタイル列のブリックへのパーティショニングが前のタイル列のそれと同一であるかどうかをエンコーダで表示され、および/またはデコーダでデコードされる。
シンタックス要素のセマンティクスは、実施例1のセマンティクスと同一であるが、copy_previous_col_flag[i]のセマンティクスが以下ように追加される。1に等しいcopy_previous_col_flag[i]は、以下をすべて指定する。
- uniform_brick_spacing_flag[i]は、uniform_brick_spacing_flag[i-1]と等しいと推測される。
- brick_height_minus1[i-1]が存在する場合、brick_height_minus1[i]は、brick_height_minus1[i-1]と等しいと推測される。
- num_brick_rows_minus1[i-1]が存在する場合、num_brick_rows_minus1[i]は、num_brick_rows_minus1[i-1]と等しいと推測され、brick_row_height_minus1[i][j]は、0からnum_brick_rows_minus1[i]-1の範囲(両端を含む)のjの各値に対して、brick_row_height_minus1[i-1][j]と等しいと推測される。
他方、VVCドラフト5の最適に及ばないシンタックス構造の問題は、残りのタイル列、タイル行、またはブリック(それぞれ)が等しい寸法を有することが(それぞれ)表示されるかまたはデコードされるまで、タイル列幅、タイル行高さ、またはブリック高さを、事前定義されたスキャン順序でエンコーダで表示し、および/またはデコーダでデコードすることができる手法によって緩和することができる。
この第2の態様に従ってエンコードするための方法が、図8に示され、この方法は、a)割り当てられるべきパーティションの数を表示する(800)ステップと、b)パーティションに割り当てられるべきユニットの数を決定する(802)ステップと、c)割り当てられるべきユニットの数が前記パーティションの数に均一に割り当てられるかどうかを表示する(804)ステップと、そうでない場合、d)次のパーティションに割り当てられるべきユニットの数を表示する(806)ステップと、e)すべてのユニットがパーティションに割り当てられるまで、ステップc)およびd)を繰り返す(808)ステップとを含む。
第2の態様に従ってデコードするための方法は、a)割り当てられるべきパーティションの数をデコードするステップと、b)パーティションに割り当てられるべきユニットの数を決定するステップと、c)割り当てられるべきユニットの数が前記パーティションの数に均一に割り当てられるかどうかをデコードするステップと、そうでない場合、d)次のパーティションに割り当てられるべきユニットの数をデコードするステップと、e)すべてのユニットがパーティションに割り当てられるまで、ステップc)およびd)を繰り返すステップとを含む。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、パーティションに割り当てられるべきユニットの数は、以下のもの、すなわち、CTU単位のピクチャ幅(例えば、パーティションがタイル列である場合)、CTU単位のピクチャ高さ(例えば、パーティションがタイル行である場合、またはパーティションが1つまたは複数の完全なタイル列に対して一度に表示されたブリック行である場合)、タイルのCTU行の数(例えば、パーティションがタイルのブリックである場合)のうちの1つである。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、パーティションは、以下のもの、すなわち、タイル列、タイル行、ブリック行のうちの1つまたは複数である。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、ユニットは、ピクチャのサンプルの長方形ブロックである。例えば、図8に示された第2の態様のユニットは、コーディングツリーブロックとすることができる。
したがって、事前定義されたスキャン順序でパーティションに割り当てられるべきユニットの数を表示することによって、特に、まだ割り当てられていないユニットの数が残りのパーティションに均等に割り当てられるべきである場合、必要とされるシンタックス要素の数および前記信号通知に必要とされるビットレートの大幅な節約が達成され得る。
図9は、図8の方法を一実施形態に従ってどのように実施することができるかの一例を示す。したがって、最初に、割り当てられるべきタイル列および/またはタイル行などのパーティションの数が表示され(900)、パーティションに割り当てられるべきコーディングツリーブロック(CTB)のユニットなどのユニットの数NUが決定される(902)。すべてのユニットが1つのパーティションに割り当てられていることをチェックするためのループを作り出すために、割り当てられるべきパーティションの数NPが1より大きいかどうかがチェックされる(904)。そうでない場合、すなわち、NP=1の場合、まだ割り当てられていないすべての残りのユニットが残りのパーティションに割り当てられなければならないことが推測または表示される(910)。
しかしながら、NP>1の場合、割り当てられるべきユニットの数NUがパーティションの数NPによって均等に割り切れるかどうかがチェックされる(906)。はいの場合、ユニットの数NUが残りのパーティションに均等に割り当てられるかどうかが決定される(908)。はいの場合、まだ割り当てられていないすべての残りのユニットNUが残りのパーティションに均等に割り当てられなければならないことが推測または表示される(910)。割り当てられるべきユニットの数NUがパーティションの数NPによって均等に割り切れないことが認められる(906)か、またはユニットの数NUが残りのパーティションに均等に割り当てられないと決定される場合(908)、事前定義されたスキャニング順序で次のパーティションに割り当てられるべきユニットの数が表示される(912)。割り当てられるべきユニットの数NUは、前記次のパーティションに割り当てられるべきユニットの表示された数だけ少なくされ(914)、割り当てられるべきパーティションの数NPは、1だけ減らされる(916)。次いで、割り当てられるべきパーティションの数NPが1より大きいかどうかをチェックする(904)ためにループバックされる。
図9の方法は、以下に記載される一実施形態に従ってデコードするために同様に実施することができる。最初に、割り当てられるべきタイル列および/またはタイル行などのパーティションの数が、ビットストリームからまたはビットストリームに沿ってデコードされ、パーティションに割り当てられるべきコーディングツリーブロック(CTB)のユニットなどのユニットの数NUが決定される。すべてのユニットが1つのパーティションに割り当てられていることをチェックするためのループを作り出すために、割り当てられるべきパーティションの数NPが1より大きいかどうかがチェックされる。そうでない場合、すなわち、NP=1の場合、まだ割り当てられていないすべての残りのユニットが残りのパーティションに割り当てられなければならないことがビットストリームからまたはビットストリームに沿って推測またはデコードされる。
しかしながら、NP>1の場合、割り当てられるべきユニットの数NUがパーティションの数NPによって均等に割り切れるかどうかがチェックされる。はいの場合、ユニットの数NUが残りのパーティションに均等に割り当てられるかどうかがビットストリームからまたはそれに沿ってデコードされる。割り当てられるべきユニットの数NUがパーティションの数NPによって均等に割り切れないことが認められるか、またはユニットの数NUが残りのパーティションに均等に割り当てられないことがビットストリームからまたはそれに沿ってデコードされる場合、事前定義されたスキャニング順序で次のパーティションに割り当てられるべきユニットの数がビットストリームからまたはそれに沿ってデコードされる。割り当てられるべきユニットの数NUは、前記次のパーティションに割り当てられるべきユニットの表示された数だけ少なくされ、割り当てられるべきパーティションの数NPは、1だけ減らされる。次いで、割り当てられるべきパーティションの数NPが1より大きいかどうかをチェックするためにループバックされる。
以下では、第2の態様、すなわち、明示的な/均一なタイル/ブリックパーティショニングの統一された信号通知のためのシンタックスおよびセマンティクスの例示的な実施形態が提供される。この実施形態は、シンタックスおよびセマンティクスに準拠するビットストリーム部分を生成するエンコーディングと、シンタックスおよびセマンティクスに従ってビットストリーム部分をデコードするデコーディングとに等しく適用可能である。
この例では、統一された信号通知は、タイル列幅およびタイル行高さを指定するために使用され、一方、ブリックの信号通知は、VVCドラフト5と比較したとき、変わっていない。
0に等しいrem_tile_col_equal_flag[i]は、0からiの範囲(両端を含む)のインデクスをもつタイル列が、CTBのユニットで等しい幅を有する場合も有していない場合もあることを指定する。1に等しいrem_tile_col_equal_flag[i]は、0からiの範囲(両端を含む)のインデクスをもつタイル列が、CTBのユニットで等しい幅を有し、tile_column_width_minus1[j]が、0からiの範囲(両端を含む)のjの各値に対してremWidthInCtbsY/(i+1)に等しいと推測されることを指定する。
0に等しいrem_tile_row_equal_flag[i]は、0からiの範囲(両端を含む)のインデクスをもつタイル行が、CTBのユニットで等しい高さを有する場合も有していない場合もあることを指定する。1に等しいrem_tile_row_equal_flag[i]は、0からiの範囲(両端を含む)のインデクスをもつタイル行が、CTBのユニットで等しい高さを有し、tile_row_height_minus1[j]が、0からiの範囲(両端を含む)のjの各値に対して、remHeightInCtbsY/(i+1)に等しいと推測されることを指定する。
他のシンタックス要素のセマンティクスは、VVCドラフト5における同じ名前のシンタックス要素のセマンティクスと全く同じように指定することができる。
以下では、さらなる態様、すなわち、タイル列およびタイル列ごとのブリック高さの表示と、明示的な/均一なタイル/ブリックパーティショニングの統一された信号通知との両方を含むシンタックスおよびセマンティクスの例示的な実施形態が提供される。この実施形態は、シンタックスおよびセマンティクスに準拠するビットストリーム部分を生成するエンコーディングと、シンタックスおよびセマンティクスに従ってビットストリーム部分をデコードするデコーディングとに等しく適用可能である。
エンコーディングの例示的な実施形態は、以下のように要約することができるが、例示的な実施形態は、表示という用語をデコーディングという用語と置き換えることによってデコーディングに適合させることができる。
タイル列は以下のように表示される。
- タイル列の数が表示される(num_tile_columns_minus1)。
- タイル列がすべてトラバースされるまで、または残りのタイル列が等しい幅を有すると表示されるまで、以下が、タイル列を右から左にトラバースするループで表示される。
o 残りの幅(CTBのユニットでの)が、まだ指定されていないタイル列の数によって均等に割り切れる場合、残りのタイル列が等しい幅を有するかどうかが表示される(rem_tile_col_equal_flag[i])。
o 残りのタイル列が等しい幅を有していない場合、タイル列幅が表示される(tile_column_width_minus1[i])。
以下は、長方形スライスでは左から右にタイル列をトラバースするループで表示され、ラスタスキャンスライスではタイル行高さを指定する1つのループエントリのみを含む。
- タイル列のブリックパーティショニングが前のタイル列のブリックパーティショニングと同一である場合のフラグ。フラグは左端のタイル列では存在しない(copy_previous_col_flag[i])。このフラグはこの例示的な実施形態では省略することができ、またはフラグによって達成されるのと同様の機能を達成するために使用することができる、以下でさらに論じる他の代替があることに留意されたい。
- タイル列のタイルブリックパーティショニングが、前のタイル列のタイルブリックパーティショニングと同一でない場合、タイル列のブリックは以下のように表示される。
o タイル列のブリックの数が表示される
(num_bricks_minus1[i])。
o タイル列のすべてのブリックがトラバースされるまで、またはタイル列の残りのブリックが等しい高さを有すると表示されるまで、以下が、ブリックを下から上にトラバースするループで表示される。
・ 残りの高さ(CTBのユニットでの)がまだ指定されていないブリックの数によって割り切れる場合、残りのブリックが等しい高さを有するかどうかが表示される(rem_brick_height_equal_flag[i][j])。
・ 残りのブリックが等しい高さを有していない場合、ブリック高さが表示される(brick_height_minus1[i][j])。
この例示的な実施形態では、以下のシンタックスを使用することができる。
num_tile_columns_minus1+1は、uniform_tile_spacing_flagが0に等しい場合、ピクチャをパーティションするタイル列の数を指定する。num_tile_columns_minus1の値は、0からPicWidthInCtbsY-1の範囲(両端を含む)になければならない。single_tile_in_pic_flagが1に等しい場合、num_tile_columns_minus1の値は0に等しいと推測される。
0に等しいrem_tile_col_equal_flag[i]は、0からiの範囲(両端を含む)のインデクスをもつタイル列が、CTBのユニットで等しい幅を有する場合も有していない場合もあることを指定する。1に等しいrem_tile_col_equal_flag[i]は、0からiの範囲(両端を含む)のインデクスをもつタイル列が、CTBのユニットで等しい幅を有すると推測されることを指定する。存在しない場合、rem_tile_col_equal_flag[i]の値は0に等しいと推測される。
tile_column_width_minus1[i]+1は、i番目のタイル列の幅をCTBのユニットで指定する。
0に等しいcopy_previous_col_flag[i]は、num_bricks_minus1[i]が存在することを指定する。1に等しいcopy_previous_col_flag[i]は、以下のすべてを指定する。
- num_bricks_minus1[i]は、num_bricks_minus1[i-1]と等しいと推測される、
- rem_brick_height_equal_flag[i][j]は、rem_brick_height_equal_flag[i-1][j]の値が存在するかまたは推測される1からnum_bricks_minus1[i]の範囲(両端を含む)のjのすべてのそのような値に対して、rem_brick_height_equal_flag[i-1][j]に等しいと推測される、
- brick_height_minus1[i][j]は、brick_height_minus1[i-1][j]の値が存在する1からnum_bricks_minus1[i]の範囲(両端を含む)のjのすべてのそのような値に対して、brick_height_minus1[i-1][j]と等しいと推測される。
0に等しいcopy_previous_col_flag[i]は、num_bricks_minus1[i]が存在することを指定する。1に等しいcopy_previous_col_flag[i]は、以下をすべて指定する。
- num_bricks_minus1[i]は、num_bricks_minus1[i-1]と等しいと推測される、
- rem_brick_height_equal_flag[i][j]は、rem_brick_height_equal_flag[i-1][j]の値が存在するかまたは推測される1からnum_bricks_minus1[i]の範囲(両端を含む)のjのすべてのそのような値に対して、rem_brick_height_equal_flag[i-1][j]に等しいと推測される、
- brick_height_minus1[i][j]は、brick_height_minus1[i-1][j]の値が存在する1からnum_bricks_minus1[i]の範囲(両端を含む)のjのすべてのそのような値に対して、brick_height_minus1[i-1][j]に等しいと推測される。
0に等しいrem_brick_height_equal_flag[i][j]は、i番目のタイル列内の0からjの範囲(両端を含む)のインデクスをもつブリックが、CTBのユニットで等しい高さを有する場合も有していない場合もあることを指定する。1に等しいrem_brick_height_equal_flag[i][j]は、i番目のタイル列内0からjの範囲(両端を含む)のインデクスをもつブリックが、CTBのユニットで等しい高さを有すると推測されることを指定する。存在しない場合、rem_brick_height_equal_flag[i][j]の値は0に等しいと推測される。
brick_height_minus1[i][j]+1は、i番目のタイル列内のj番目のブリックの高さをCTBのユニットで指定する。
他のシンタックス要素のセマンティクスは、VVCドラフト5における同じ名前をもつシンタックス要素のセマンティクスと全く同じように指定することができる。
デコーディングプロセスは、以下のようにまたは以下と同様に定義された変数を使用することができる。
i番目のタイル列の幅をCTBのユニットで指定する、0からnum_tile_columns_minus1の範囲(両端を含む)のiのリストcolWidth[i]は、以下のように導出される。
for( i = num_tile_columns_minus1, remWidthInCtbsY = PicWidthInCtbsY;
i > 0 && !rem_tile_col_equal_flag[ i ];
remWidthInCtbsY -= tile_column_width_minus1[ i ] + 1, i- - )
if( !rem_tile_col_equal_flag[ i ] )
colWidth[ i ] = tile_column_width_minus1[ i ] + 1
if( i > 0 )
for( j = i; j >= 0; j- - )
colWidth[ j ] = remWidthInCtbsY / ( i + 1 )
else
colWidth[ 0 ] = remWidthInCtbsY
i番目のタイル列内のj番目のブリック行の高さをCTBのユニットで指定する、0からnum_tile_columns_minus1の範囲(両端を含む)のiおよび0からnum_bricks_minus1[i]の範囲(両端を含む)のjに対するリストcolBrickHeight[i][j]、j番目のタイル行の高さをCTBのユニットで指定する、0からNumTileRows-1の範囲(両端を含む)のjに対するリストRowHeight[j]、CTBのユニットでのj番目のタイル行境界の場所、値NumTileRows、およびNumTilesInPicの値を指定する、0からNumTileRowsの範囲(両端を含む)のjに対するリストtileRowBd[j]は、以下のように導出される。
for( i = 0, i <= num_tile_columns_minus1; i++ ) {
for( j = num_bricks_minus1[ i ], remHeightInCtbsY = PicHeightInCtbsY;
j > 0 && !rem_brick_height_equal[ i ][ j ];
remHeightInCtbsY -= brick_height_minus1[ i ][ j ] + 1, j- - )
if( !rem_brick_height_equal_flag[ i ][ j ] )
colBrickHeight[ i ][ j ] = brick_height_minus1[ i ][ j ] + 1
if( j > 0 )
for( k = j; k >= 0; k- - )
colBrickHeight[ i ][ j ] = remHeightInCtbsY / ( j + 1 )
else
colBrickHeight[ i ][ 0 ] = remHeightInCtbsY
}
for( i = 0, tileRow = 0, currBrickBd = colBrickHeight[ 0 ][ 0 ], tileRowBd[ 0 ] = 0; i <= num_bricks_minus1[ 0 ];
i++, currBrickBd += colBrickHeight[ 0 ][ i ] ) {
tileCol = 1
matchingBdFlag = 1
while( tileCol <= num_tile_columns_minus1 && matchingBdFlag )
brickIdxInCol = 0
brickBdInCol = colBrickHeight[ tileCol ][ 0 ]
while( brickBdInCol < currBrickBd && brickIdxInCol <= num_bricks_minus1[ tileCol ] ) {
brickIdxInCol++
brickBdInCol += colBrickHeight[ tileCol ][ brickIdxInCol ]
}
if( brickBdInCol = = currBrickBd )
tileCol++
else
matchingBdFlag = 0
}
if( matchingBdFlag ) {
tileRowBd[ tileRow + 1 ] = currBrickBd
RowHeight[ tileRow ] = currBrickBd - tileRowBd[ tileRow ]
tileRow++
}
}
NumTileRows = tileRow
NumTilesInPic = NumTileRows * ( num_tile_columns_minus1 + 1 )
single_tile_in_pic_flagが0に等しい場合、NumTilesInPicは1より大きくなるべきである。i番目のタイル列境界の場所をCTBのユニットで指定する、0からnum_tile_columns_minus1+1の範囲(両端を含む)のiに対するリストtileColBd[i]は、以下のように導出される。
for( tileColBd[ 0 ] = 0, i = 0; i <= num_tile_columns_minus1; i++ )
tileColBd[ i + 1 ] = tileColBd[ i ] + colWidth[ i ]
PPSを参照するピクチャのブリックの数を指定する変数NumBricksInPicと、リストBrickColBd[brickIdx]、BrickRowBd[brickIdx]、BrickWidth[brickIdx]と、垂直ブリック境界の場所をCTBのユニットで、水平ブリック境界の場所をCTBのユニットで、ブリック列の幅をCTBのユニットで、およびブリック列の高さをCTBのユニットで指定する、0からNumBricksInPic-1の範囲(両端を含む)のbrickIdxに対するBrickHeight[brickIdx]とが、導出され、0からNumTilesInPic-1の範囲(両端を含む)の各iに対して、uniform_brick_spacing_flag[i]が1に等しい場合、num_brick_rows_minus1[i]の値は、以下のように推測される。
for( i =0;i <= num_tile_columns_minus1; i++ )
colBrickIdx[ i ] = 0
for ( brickIdx = 0, i = 0; i < NumTilesInPic; i++ ) {
tileX = i % ( num_tile_columns_minus1 + 1 )
tileY = i / ( num_tile_columns_minus1 + 1 )
do {
BrickColBd[ brickIdx ] = tileColBd[ tileX ]
BrickRowBd[ brickIdx ] = colBrickBd[ colBrickIdx[ tileX ] ]
BrickWidth[ brickIdx ] = colWidth[ tileX ]
BrickHeight[ brickIdx ] = colBrickHeight[ colBrickIdx[ tileX ] ]
colBrickIdx[ tileX ]++
brickIdx++
while( tileRowBd[ tileY + 1 ] <= colBrickBd[ colBrickIdx[ tileX ] ] )
}
NumBricksInPic = brickIdx
一実施形態によれば、エンコードするための方法は、a)パーティションに割り当てられるべきユニットの数を決定するステップと、b)割り当てられるべき明確にサイズ設定されたパーティションの数を表示するかまたは推測するステップと、c)明確にサイズ設定されたパーティションのサイズまたはユニットの数を表示するステップと、d)割り当てられるべき均等にサイズ設定されたパーティションの数を表示するかまたは推測するステップとを含む。
一実施形態によれば、デコードするための方法は、a)パーティションに割り当てられるべきユニットの数を決定するステップと、b)割り当てられるべき明確にサイズ設定されたパーティションの数をデコードするかまたは推測するステップと、c)明確にサイズ設定されたパーティションのサイズ、または明確にサイズ設定されたパーティションのユニットの数をデコードするステップと、d)割り当てられるべき均等にサイズ設定されたパーティションの数をデコードするかまたは推測するステップとを含む。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、パーティションに割り当てられるべきユニットの数は、以下のもの、すなわち、CTU単位のピクチャ幅(例えば、パーティションがタイル列である場合)、CTU単位のピクチャ高さ(例えば、パーティションがタイル行である場合、またはパーティションが1つまたは複数の完全なタイル列に対して一度に表示されたブリック行である場合)、タイルのCTU行の数(例えば、パーティションがタイルのブリックである場合)のうちの1つである。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、パーティションは、以下のもの、すなわち、タイル列、タイル行、ブリック行のうちの1つまたは複数である。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、ステップdは、パーティションに割り当てられるべきユニットの数から明確にサイズ設定されたパーティションのユニットの数を減らすことによって、まだパーティションに割り当てられていないユニットの数を決定することを含み、この方法は、
- 明確にサイズ設定されたパーティションにおけるユニットのサイズまたは数に従って、および事前定義されたまたは表示/デコードされたスキャン順序に従って、明確にサイズ設定されたパーティションにパーティションを割り当てることと、
- パーティションにまだ割り当てられていないユニットを均等にサイズ設定されたパーティションの数で割ることによって、および事前定義されたおよび/または表示/デコードされたスキャン順序に従って、均等にサイズ設定されたパーティションにパーティションを割り当てることとをさらに含む。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、明確にサイズ設定されたパーティションの数は、上位レベルのシンタックス構造(例えば、SPS)で表示され、および/またはデコードされ、一方、明確にサイズ設定されたパーティションのサイズ、および/または割り当てられる均等にサイズ設定されたパーティションの数は、下位レベルのシンタックス構造(例えば、PPS)で表示にされ、および/またはそれからデコードされ得る。
一実施形態によれば、明確にサイズ設定されたパーティションの数は1に等しいことが推測される(例えば、コーディング標準で事前決定される)。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、ステップdは、
- まだ割り当てられていないユニットの数を均等に分割することができるパーティションサイズのセットまたはリストを決定することと、
- セットまたはリストのアイテムの数が1に等しい場合、均等にサイズ設定されたパーティションの数が1に等しいと推測するステップと、
- セットまたはリストにおけるアイテムに対応するインデクス(など)を表示および/またはデコードすることであり、インデクスが、割り当てられるべき均等にサイズ設定されたパーティションの数を示す、表示および/またはデコードすることとを含む。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、まだ割り当てられていないユニットの数を均等に分割することができるパーティションサイズのセットまたはリストは、閾値よりも小さいパーティションサイズを除くことによって規制され、閾値は、例えばコーディング標準で事前定義されるか、または表示/デコードされ得る。例えば、CTU単位の最小タイル列幅は、事前定義されるか、または表示/デコードされ得る。
一実施形態によれば、セットまたはリストのアイテムに対応するインデクスは、固定長コードワード、例えば、u(v)でコード化され、コードワードの長さは、セットまたはリストのアイテムの数によって決定される。
タイル行の境界が潜在的なタイル行の境界かどうかの表示
いくつかの実施形態では、水平ブリック境界がピクチャにわたって整列される場合、タイル行境界が推測される。この節は、タイル行境界を信号通知するための一実施形態を提示する。この実施形態は、シンタックスにおいてタイル行境界の前にブリック境界が表示される実施形態と一緒に適用することができる。
実施形態は以下のステップのうちの1つまたは複数を含むことができる(それらのうちの一部は既に前に説明されている)。
- 潜在的なタイル行境界は、ブリック境界がピクチャを通じて整列されている(水平方向に)境界であると推測される。
- すべての整列されたブリック境界がタイル行境界を形成するかどうかが、ビットストリームにおいてまたはそれに沿ってエンコーダによって推測され、および/またはビットストリームからまたはそれに沿ってデコーダによってデコードされる。例えば、ビットストリームシンタックスのフラグを使用することができる。
- すべての整列されたブリック境界がタイル行境界を形成しない場合、各整列されたブリック境界に対して、その境界がタイル行境界かどうかが、ビットストリームにおいてまたはそれに沿ってエンコーダによって表示され、および/またはビットストリームからまたはそれに沿ってデコーダによってデコードされる。例えば、整列されたブリック境界ごとに(ピクチャ境界である整列されたブリック境界を除いて)、フラグがビットストリームシンタックスに存在し得る。
例えば、以下のシンタックスを使用することができる。
NumAlignedBrickRowsは、別の実施形態ではNumTileRowsのように導出することができる。
提示されたシンタックス要素のセマンティクスは、以下のように指定することができる。
0に等しいexplicit_tile_rows_flagは、水平ブリック境界がピクチャにわたって整列されるたびに、タイル行境界が推測されることを指定する。1に等しいexplicit_tile_rows_flagは、tile_row_flag[i]シンタックス要素が存在することを指定する。
0に等しいtile_row_flag[i]は、水平ブリック境界がピクチャにわたって整列されているi番目のそのような水平境界がタイル行境界ではないことを指定する。1に等しいtile_row_flag[i]は、水平ブリック境界がピクチャにわたって整列されているi番目のそのような水平境界がタイル行境界であることを指定する。水平ブリック境界がピクチャにわたって整列される0番目のそのような水平境界は、ピクチャの最上部の境界である。
ブリックと全く同じようにパーティションされるべきタイル列の表示
いくつかの例示の実施形態では、シンタックスは、タイル列がループエントリ順序(例えば、左から右にタイル列をスキャンする)に前のタイル列と全く同じようにブリックにパーティションされるという表示を含む。実施形態は、表示または類似の表示なしに、同様に適用されることを理解する必要がある。例えば、タイル列のスキャン順序は、右から左にすることができ、その結果、現在のタイル列のブリックパーティショニングは、右側のタイル列からコピーされることが表示され得る。別の例では、等しい幅をもつすべてのタイル列が同じブリックパーティショニングを有することが表示または推測される。さらなる別の例では、ブリックパーティショニングがコピーされるタイル列のインデクスが表示される。実施形態は、ブリックへのタイル列のパーティショニングを判断する別の方法が前の表示に基づいている場合、同様に適用されることも理解する必要がある。この節は、いくつかの関連する実施形態を提示する。
一実施形態では、同じ幅(例えば、CTBにおいて)を有するすべてのタイル列がブリックへの同じパーティショニングを有するかどうかを、エンコーダはビットストリームにおいてまたはそれに沿って表示し、および/またはデコーダはビットストリームからまたはそれに沿ってデコードする。例えば、same_brick_spacing_in_equally_wide_tile_cols_flagと呼ばれるシンタックス要素を使用することができる。
一実施形態では、同じブリックパーティショニングを有する、ループエントリ順序(例えば、タイル列を左から右にスキャンする)における隣接するタイル列の数を、エンコーダはビットストリームにおいてまたはそれに沿って表示し、および/またはデコーダはビットストリームからまたはそれに沿ってデコードする。例えば、num_tile_cols_with_same_brick_partitioning_minus1[i]と呼ばれることがあるシンタックス要素は、u(v)コード化することができ、ここで、vは、ブリックパーティショニングがまだ表示されていない残りのタイル列によって決定される。
一実施形態では、タイル列がブリックに全く同じようにパーティションされることの表示に関連するシンタックス要素(例えば、copy_previous_col_flag[i])が存在するかどうかを、エンコーダはビットストリームにおいてまたはそれに沿って表示し、および/またはデコーダはビットストリームからまたはそれに沿ってデコードする。一実施形態では、その表示は、SPSなどのシーケンスレベルシンタックス構造である。別の実施形態では、その表示は、PPSなどのピクチャレベルシンタックス構造である。一実施形態では、タイル列がブリックに全く同じようにパーティションされることの表示に関連するシンタックス要素がないことにより、ブリックパーティショニングが、すべてのタイル列に対して1つずつ表示および/またはデコードされることが、例えば、コーディング標準で事前定義されている。一実施形態では、タイル列がブリックに全く同じようにパーティションされることの表示に関連するシンタックス要素がないことにより、ブリックパーティショニングが、1つのタイル列に対して表示および/またはデコードされ、すべてのタイル列に対して同じであると推測される。一実施形態では、タイル列がブリックに全く同じようにパーティションされることの表示に関連するシンタックス要素がないことを処理するための方法が、ビットストリームにおいてまたはそれに沿って、例えば、SPSで、エンコーダによって表示され、および/またはビットストリームからまたはそれに沿って、例えば、SPSに基づいて、デコーダによってデコードされる。この方法は、プロセスの事前定義されたセットの中に表示および/またはデコードすることができ、プロセスの事前定義されたセットは、限定ではないが、i)すべてのタイル列に対して1つずつ表示および/またはデコードされるブリックパーティショニングと、ii)1つのタイル列に対して表示および/またはデコードされ、すべてのタイル列に対して同じであると推測されるブリックパーティショニングとを含むことができる。
したがって、実施形態に従ってタイルおよびブリックパーティショニングを信号通知するためのシンタックスおよびセマンティクスは、信号通知を実行するのに必要とされるシンタックス要素およびシンタックス行の数を大幅に節約する。その結果として、タイルおよびブリックパーティショニングを表示するのに必要とされるビット数が大幅に節約される。
これらの利点が以下の例で示され、図10a、図10b、および図10cに示される3つの異なるタイルおよびブリックパーティショニングが、VVCドラフト5によるタイルおよびブリックパーティショニングと実施形態によるタイルおよびブリックパーティションの性能を比較するために使用される。
図10aおよび図10bは、全方向性メディアフォーマット(OMAF(ISO/IEC 23090-2)条項D.6.3およびD.6.4(それぞれ)に記載される6K実効正距円筒(ERP)スキームおよびキューブマップ投影(CMP)スキーム(それぞれ)を達成するタイルおよびブリックパーティショニングを提示する。これらのスキームは、VR産業界フォーラムガイドラインにおいて推奨されている。図10cに提示されたスキームは、別のやり方で、図10bのスキームと同等であるが、異なるピクチャアスペクト比を使用する。
以下の性質が、VVCドラフト5、ならびにタイル列およびタイル列ごとのブリック高さの表示と明示的な/均一なタイル/ブリックパーティショニングの統一された信号通知との両方を組み合わせた実施形態から導出される。
- タイルおよびブリックパーティショニングを表示するためのシンタックス要素の数
- タイルおよびブリックパーティショニングを表示するためのシンタックス行の数
- 以下の図に含まれるスキームのタイルおよびブリックパーティショニングを表示するのに必要とされるビット数
- 以下の図で提示されるスキームについて、VVCドラフト5と比較したときに実施形態によって提供されるパーセントでのビット数節約。
128×128ルーマCTBサイズで導出される性質が、以下の表に提示される。
その結果、シンタックス要素の数が13から7に減少し、必要とされるシンタックス行の数が26から20に減少することが分かる。図10a~図10cのタイルおよびブリックパーティショニングの各々に対して実施形態によって提供されるビット数節約は、VVCドラフト5と比較したとき50%を超える。この提案により、セマンティクスおよび導出プロセスもより短くなることにも注意されたい。
コード化されていないタイルまたはブリックの表示
いくつかの用途では、タイルおよび/またはブリックのサブセットのみが占められるように、エンコードおよび/またはデコードされるべきコンテンツをタイルおよび/またはブリックに割り当てることは妥当であり得る。例えば、360度ビデオのビューポート依存ストリーミングでは、タイルなどの独立にコード化されたピクチャ領域のサブセットのみを受け取ることができる。別の例では、ボリュメトリックまたはポイントクラウドビデオのパッチベースエンコーディングが適用され、パッチは、ピクチャのタイルおよび/またはブリックのサブセットのみを占める。
エンコーディングの一実施形態によれば、コード化されていないタイルまたはブリックは、ビットストリームにおけるまたはそれに沿ったスライスデータ上のシンタックス構造で表示される。コード化されていないタイルまたはブリックのシンタックス要素はスライスデータにエンコードされない。コード化されていないタイルまたはブリックは、サンプルアレイにおいて再構築されたサンプル値を0に設定することなどの事前定義されたまたは指示された方法を使用して、再構築される(例えば、デコードされた参照ピクチャに)。
デコーディングの一実施形態によれば、コード化されていないタイルまたはブリックは、ビットストリームからのまたはそれに沿ったスライスデータ上のシンタックス構造からデコードされる。コード化されていないタイルまたはブリックのシンタックス要素はスライスデータからデコードされない。コード化されていないタイルまたはブリックは、サンプルアレイにおいて再構築されたサンプル値を0に設定することなどの事前定義されたまたは指示された方法を使用して、デコードされる(例えば、デコードされた参照ピクチャに)。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、コード化されていないブリックの数は、例えば、ue(v)などの可変長コードワードを使用して、タイル列に対して表示および/またはデコードされる。タイル列内のブリックは、事前定義されたスキャン順序で(例えば、下から上に)トラバースされる。トラバースされるブリックごとに、ブリックがコード化されていないか否かを判断するために、フラグが表示および/またはデコードされる。ブリックがコード化されていない場合、コード化されていないとして割り当てられるように残されているブリックの数が、1だけ減らされる。コード化されていないとして割り当てられるように残されたブリックがなくなるまで、プロセスは継続される。
図11は、本発明の実施形態を使用するのに適するビデオデコーダのブロック図を示す。図11は、2レイヤデコーダの構造を示しているが、デコーディング動作は単一レイヤデコーダで同様に使用することができることが理解されるであろう。
ビデオデコーダ550は、ベースレイヤの第1のデコーダセクション552と、予測レイヤの第2のデコーダセクション554とを含む。ブロック556は、ベースレイヤピクチャに関する情報を第1のデコーダセクション552に送り出し、予測レイヤピクチャに関する情報を第2のデコーダセクション554に送り出すためのデマルチプレクサを示す。参照P’nは、画像ブロックの予測表現を表す。参照D’nは、再構築予測誤差信号を表す。ブロック704、804は、予備再構成画像(I’n)を示す。参照R’nは、最終再構成画像を表す。ブロック703、803は、逆変換(T-1)を示す。ブロック702、802は、逆量子化(Q-1)を示す。ブロック701、801は、エントロピーデコーディング(E-1)を示す。ブロック705、805は、参照フレームメモリ(RFM)を示す。ブロック706、806は、予測(P)(インター予測またはイントラ予測のいずれか)を示す。ブロック707、807は、フィルタリング(F)を示す。ブロック708、808は、デコード化予測誤差情報を予測ベースレイヤ/予測レイヤ画像と組み合わせて、予備再構成画像(I’n)を取得するために使用することができる。予備再構築およびフィルタ処理されたベースレイヤ画像は、第1のデコーダセクション552からの出力709であり得、予備再構築およびフィルタ処理されたベースレイヤ画像は、第1のデコーダセクション554からの出力809であり得る。
本明細書において、デコーダは、プレーヤー、レシーバ、ゲートウェイ、デマルチプレクサ、および/またはデコーダなどの、デコーディング動作を実行することができるオペレーショナルユニットを包含すると解釈されるべきである、
図12は、本発明の一実施形態によるデコーダの動作の流れ図を示す。実施形態のデコーディング動作は、デコーダが指示をデコードすることを除いて、他の点では、エンコーディング動作と同様である。したがって、デコーディング方法は、タイル列の表示および1つまたは複数のタイル列のブリック高さの表示を含むビットストリーム部分を一度にデコードする(1200)ことと、ピクチャを通じて整列されたブリック行を検出する際に、潜在的なタイル行を推測する(1202)ことと、潜在的なタイル行の境界がタイル行の境界であるかどうかの表示を推測するかまたはデコードする(1204)ことと、表示されたタイル列、表示または推測されたタイル行、および表示されたブリック高さを使用して、1つまたは複数のピクチャをビットストリームからデコードする(1206)ことであり、1つまたは複数のピクチャが、表示されたタイル列および表示もしくは推測されたタイル行に沿ってタイルのグリッドにパーティションされ、タイルのグリッド内のタイルが、整数のコーディングツリーユニットを含み、1つまたは複数のブリックにパーティションされ、ブリックが、タイル内に整数のコーディングツリーユニットの行を含む、デコードする(1206)こととを含む。
図13は、本発明の別の実施形態によるデコーダの動作の流れ図を示す。デコーディング方法は、a)割り当てられるべきパーティションの数の表示をデコードする(1300)ステップと、b)パーティションに割り当てられるべきユニットの数を決定する(1302)ステップと、c)割り当てられるべきユニットの数が前記パーティションの数に均等に割り当てられるかどうかを決定する(1304)ステップと、そうでない場合、d)次のパーティションに割り当てられるべきユニットの数を決定する(1306)ステップと、e)すべてのユニットがパーティションに割り当てられるまで、ステップc)およびd)を繰り返す(1308)ステップとを含む。
長方形スライスへのピクチャのパーティショニングの表示
長方形スライスの信号通知をエンコードおよび/またはデコードするための改善された方法の実施形態が、次のパラグラフで紹介される。実施形態は、タイルおよびブリックパーティショニングの実施形態と一緒に、またはそれと無関係に適用することができる。実施形態は、VVCドラフト5で指定されているタイル、ブリック、および長方形スライスの定義および特性に基づく。実施形態では、長方形スライスを表示する(例えば、長方形スライスの場所、幅、および高さを表示または導出する)のに必要とされるビット数が減じられる。
第1の態様によるエンコーディング方法は、長方形スライスの左上ブリックの場所をビットストリームにおいてまたはそれに沿って表示するか、あるいは長方形スライスの左上ブリックの場所を推測することと、長方形スライスがタイルの1つまたは複数のブリックを含むかどうかを場所から判断することと、長方形スライスがタイルの1つまたは複数のブリックを含む場合、長方形スライス内のブリックの数をビットストリームにおいてまたはそれに沿って表示するか、あるいは長方形スライス内のブリックの数を推測することとを含む。
第1の態様によるデコーディング方法は、長方形スライスの左上ブリックの場所をビットストリームからまたはそれに沿ってデコードするか、あるいは長方形スライスの左上ブリックの場所を推測することと、長方形スライスがタイルの1つまたは複数のブリックを含むかどうかを場所から判断することと、長方形スライスがタイルの1つまたは複数のブリックを含む場合、長方形スライス内のブリックの数をビットストリームからまたはそれに沿ってデコードするか、あるいは長方形スライス内のブリックの数を推測することとを含む。
ブリックの場所は、例えば、ピクチャのブリックスキャンにおけるブリックインデクスとすることができる。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態では、長方形スライスの左上ブリックの場所が任意のタイルの左上ブリックでない場合、長方形スライスはタイルの1つまたは複数のブリックを含むことが判断される。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態では、長方形スライスの左上ブリックの場所がタイルの左上ブリックであり、タイルが多数のブリックを含む場合、長方形スライスは、タイルのブリックまたは完全なタイルのいずれかを含むことが判断される。エンコーディングに適用可能な一実施形態では、長方形スライスがタイルのブリックまたは完全なタイルのいずれかを含むことができることが判断された場合、長方形スライスがタイルのブリックまたは完全なタイルを含むかどうかが、ビットストリームにおいてまたはそれに沿って表示される。デコーディングに適用可能な一実施形態では、長方形スライスがタイルのブリックまたは完全なタイルのいずれかを含むことができることが判断された場合、長方形スライスがタイルのブリックまたは完全なタイルを含むかどうかが、ビットストリームからまたはそれに沿ってデコードされる。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態では、長方形スライスがタイルのブリックを含むことが、推測されるか、表示されるか(エンコーディングの一部として)、またはデコードされる場合、例えば、numDeltaValuesと呼ばれる変数が、長方形スライスの左上ブリックの場所の後に続く、同じタイル内のブリックの数に等しく設定される。numDeltaValuesが1に等しい場合、長方形スライスが正確に1つのブリックを含むことが推測される。そうでない場合は、変数numDeltaValuesは、長方形スライスの右下ブリックを表示する第1のシンタックス要素、または長方形スライスのブリックの数を表示する第2のシンタックス要素、または長方形スライスの高さ(ブリックの)を表示する第3のシンタックス要素、または任意の類似のシンタックス要素のシンタックス要素長さを導出する際に使用される。例えば、第1、第2、または第3のシンタックス要素、あるいは任意の類似したシンタックス要素は、u(v)コード化することができ、その長さはCeil(Log2(numDeltaValues))ビットである。
例示の実施形態では、以下のシンタックスが使用される。
シンタックス要素のセマンティクスは、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]の値は0に等しいと推測される。bottom_right_brick_idx_delta[i]が有することができる値の数を指定する変数numDeltaValuesは、以下のように導出される。
if( BrickIdxInTile[ brIdx ] > 0 )
numDeltaValues =
NumBricksInTile[ top_left_brick_idx[ i ] ] - BrickIdxInTile[ top_left_brick_idx[ i ] ]
else
numDeltaValues = NumBricksInPic - top_left_brick_idx[ i ]
bottom_right_brick_idx_delta[i]シンタックス要素の長さは、Ceil(Log2(numDeltaValues))ビットである。変数NumBricksInTile[brickIdx]は、ピクチャのブリックスキャンにおいてインデクスbrickIdxをもつブリックを含むタイル内のブリックの数を指定する。変数BrickIdxInTile[brickIdx]は、ブリックがピクチャのブリックスキャンにおいてインデクスbrickIdxによって識別されるとき、ブリックを含むタイル内のブリックのインデクスを指定する。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態では、長方形スライスの左上ブリックの場所が推測される。最初に、すべてのブリック場所は空にマークされる。ブリックを長方形スライスに割り当てるループは、ビットストリームにおいてまたはそれに沿って含まれるか、またはビットストリームからまたはそれに沿ってデコードされる。ループエントリごとに、長方形スライスの左上ブリックは、事前定義された、指示された、またはデコードされたスキャン順序における次の空のブリック場所であると推測される。例えば、ピクチャ内のブリックスキャン順序が使用されることが、例えばコーディング標準で事前定義され得る。長方形スライスの右下ブリックは、例えば上述のように、推測されるか、表示されるか、またはデコードされ得、左上ブリックと右下ブリックとが隅に置かれた長方形を形成するブリックは、割り当てられたとしてマークされる。同じまたは類似のプロセスが、ループエントリごとに繰り返される。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態では、長方形スライスが完全なタイルを含むことが、判断されるか(エンコードまたはデコーディングの一部として)、表示されるか(エンコーディングの一部として)、またはデコードされる(デコーディングの一部として)場合、長方形スライスの右下ブリックを表示するためのシンタックス要素は、以下のもののうちの1つまたは複数から導出される。
- 可能な右下ブリック場所のセットが導出される。セットは、タイル内の最後のブリック場所であり、長方形スライスの左上ブリックを含むタイル行にまたはそれより下に配置され、長方形スライスの左上ブリックを含むタイル列の右にまたはその右側に配置され、長方形の空のタイルの場所のセット(まだどの長方形スライスにも割り当てられていない)を囲むそれらのブリック場所のみを含むことができる。
- 可能な右下ブリック場所のセットのエントリが、インデクスづけされるかまたは列挙される。
- 長方形スライスの右下ブリックを表示するためのu(v)エンコードされたシンタックス要素の長さが、可能な右下ブリック場所のセット内のエントリの数から導出される。エントリnumEntの数が1に等しい場合、右下ブリックインデクスは、表示またはデコードされる必要はない。そうでない場合は、シンタックス要素の長さは、Ceil(Log2(numEnt))ビットに等しい。
- 長方形スライスの右下ブリックを表示するためのシンタックス要素は、可能な右下ブリック場所の列挙されたセットへのインデクスである。
第2の態様によるエンコーディング方法は、
- 長方形スライスの左上ブリックの場所をビットストリームにおいてまたはそれに沿って表示するか、あるいは長方形スライスの左上ブリックの場所を推測することと、
- 長方形スライスがタイルの1つまたは複数のブリックを含むかどうかを場所から判断することと、
- 長方形スライスがタイルの1つまたは複数のブリックを含む場合、長方形スライスの幅が1つのタイル列に等しいと推測し、他の場合には、左上ブリックが右端タイル列にある場合、長方形スライスの幅が1つのタイル列に等しいと推測し、そうでない場合は、タイル列の長方形スライスの幅をビットストリームにおいてまたはそれに沿って表示することと、
- 長方形スライスがタイルの1つまたは複数のブリックを含む場合、長方形スライス内のブリックの数をビットストリームにおいてまたはそれに沿って表示するか、あるいは長方形スライス内のブリックの数を推測し、他の場合には、左上ブリックが一番下のタイル行にある場合、長方形スライスの高さが1つのタイル行に等しいと推測し、そうでない場合は、タイル行の長方形スライスの高さをビットストリームにおいてまたはそれに沿って表示することとを含む。
第2の態様によるコーディング方法は、
- 長方形スライスの左上ブリックの場所をビットストリームからまたはそれに沿ってデコードするか、あるいは長方形スライスの左上ブリックの場所を推測することと、
- 長方形スライスがタイルの1つまたは複数のブリックを含むかどうかを場所から判断することと、
- 長方形スライスがタイルの1つまたは複数のブリックを含む場合、長方形スライスの幅が1つのタイル列に等しいと推測し、他の場合には、左上ブリックが右端タイル列にある場合、長方形スライスの幅が1つのタイル列に等しいと推測し、そうでない場合は、タイル列の長方形スライスの幅をビットストリームからまたはそれに沿ってデコードすることと、
- 長方形スライスがタイルの1つまたは複数のブリックを含む場合、長方形スライス内のブリックの数をビットストリームからまたはそれに沿ってデコードするか、あるいは長方形スライス内のブリックの数を推測し、他の場合には、左上ブリックが一番下のタイル行にある場合、長方形スライスの高さが1つのタイル行に等しいと推測し、そうでない場合は、タイル行の長方形スライスの高さをビットストリームからまたはそれに沿ってデコードすることとを含む。
エンコーディングおよび/またはデコーディングに適用可能な、および第1の態様および/または第2の態様に適用可能な一実施形態では、長方形スライスがタイルのブリックを含み、タイルが2つのブリックを含み、現在のブリック(すなわち、長方形スライスの左上ブリック)がタイルの最上部のブリックであるかまたは現在のブリックがタイルの一番下のブリックであると判断されたか、表示されたか、またはデコードされた場合、長方形スライス内のブリックの数は1に等しい(ブリックにおいて)と推測される。
例示の実施形態では、以下のシンタックスが使用される。
シンタックス要素の変数およびセマンティクスは、以下の追加を加えて前に説明したように指定することができる。
- tlBrickIdxは、前に説明したように、ピクチャ内のブリックスキャンなどの事前定義されたスキャン順序で次の空のブリック場所として指定することができる。tlBrickIdxは、iの値ごとに、すなわち、ループエントリごとに、再導出される。
- numFreeColumnsOnTheRight[brickIdx]は、インデクスbrickIdxをもつブリックの右側のタイル列の数を表示する変数である。
- slice_width_minus1[i]+1は、タイル列内のi番目の長方形スライスの幅を指定する。存在しない場合、slice_width_minus1[i]は0に等しいと推測される。
- 0に等しいfull_tiles_in_slice_flag[i]は、i番目の長方形スライスが単一タイルの1つまたは複数のブリックを含むことを指定する。1に等しいfull_tiles_in_slice_flag[i]は、i番目の長方形スライスが1つまたは複数の完全なタイルを含むことを指定する。BrickIdxInTile[tlBrickIdx]が0より大きい場合(すなわち、長方形スライスの左上ブリックがタイルの左上ブリックでない場合)、full_tiles_in_slice_flag[i]は0に等しいと推測される。slice_width_minus1[i]が0より大きい場合、またはBrickIdxInTile[tlBrickIdx]が0に等しく、NumBricksInTile[tlBrickIdx]が1に等しい場合、full_tiles_in_slice_flag[i]は1に等しいと推測される。
- full_tiles_in_slice_flag[i]が0に等しい場合、numFreeRowsBelow[brickIdx]は、同じタイル内のインデクスbrickIdxをもつブリックより下のタイル内のブリックの数を表示する変数である。そうでない場合は、numFreeRowsBelow[brickIdx]は、インデクスbrickIdxをもつブリックを含むタイルより下のタイル行の数を表示する変数である。
- full_tiles_in_slice_flag[i]が0に等しい場合、slice_height_minus1[i]+1は、ブリック内のi番目の長方形スライスの高さを指定する。そうでない場合は、slice_height_minus1[i]+1は、タイル行内のi番目の長方形スライスの高さを指定する。存在しない場合、slice_height_minus1[i]は0に等しいと推測される。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態では、スライス幅シンタックス要素(例えば、slice_width_minus1)の長さは、長方形スライスの左上ブリック場所に基づいて可能な値の数から導出される。上述の変数およびシンタックス要素を使用することによって、slice_width_minus1の長さは、Ceil(Log2(numFreeColumnsOnTheRight[tlBrickIdx]+1))に等しい。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態では、スライス高さシンタックス要素(例えばslice_height_minus1)の長さは、長方形スライスの左上ブリック場所と、長方形スライスが、単一タイルのブリック、または完全なタイルを含むかどうかに基づいて、可能な値の数から導出される。上述の変数およびシンタックス要素を使用することによって、slice_height_minus1の長さは、Ceil(Log2( numDeltaValues)
)に等しく、ここで、numDeltaValuesは以下のように導出される。
if( full_tiles_in_slice_flag[ i ] = = 0)
numDeltaValues = NumBricksInTile[ tlBrickIdx ] - BrickIdxInTile[ tlBrickIdx ]
else
numDeltaValues = numFreeRowsBelow[ tlBrickIdx ] + 1
コード化されていない長方形スライスの表示
いくつかの用途では、長方形スライスのサブセットのみが占められるように、エンコードおよび/またはデコードされるべきコンテンツを長方形スライスに割り当てることは妥当であり得る。例えば、360度ビデオのビューポート依存ストリーミングでは、長方形スライスのサブセットのみを受け取ることができる。別の例では、ボリュメトリックまたはポイントクラウドビデオのパッチベースエンコーディングが適用され、パッチは、ピクチャの長方形スライスのサブセットのみを占める。
エンコーディングの一実施形態によれば、コード化されていない長方形スライスは、ビットストリームにおいてまたはそれに沿って、例えば、PPSで表示される。コード化されていない長方形スライスは、VCL NALユニットとしてビットストリームにエンコードされない。コード化されていない長方形スライスは、サンプルアレイにおいて再構築されたサンプル値を0に設定することなどの事前定義されたまたは表示された方法を使用して、再構築される(例えば、デコードされた参照ピクチャに)。
デコーディングの一実施形態によれば、コード化されていない長方形スライスは、ビットストリームからまたはそれに沿って、例えば、PPSに基づいてデコードされる。コード化されていない長方形スライスは、ビットストリームからのVCL NALユニットからデコードされない。代わりに、コード化されていない長方形スライスは、サンプルアレイにおいてデコードされたサンプル値を0に設定することなどの事前定義されたまたは表示された方法を使用して、デコードされる(例えば、デコードされた参照ピクチャに)。
エンコーディングおよび/またはデコーディングに適用可能な一実施形態によれば、フラグは、長方形スライスごとに表示および/またはデコードされ、フラグは、長方形スライスがコード化されていないか否かを示す。
一実施形態によれば、コード化されていない長方形スライスの数は、例えば、ue(v)などの可変長コードワードを使用して、表示および/またはデコードされる。長方形スライスは、事前定義されたスキャン順序で(長方形スライスの左上CTUの逆のラスタスキャン順序で)トラバースされる。トラバースされた長方形スライスごとに、フラグは、長方形スライスがコード化されていないか否かを判断するために表示されるかおよび/またはデコードされる。長方形スライスがコード化されていない場合、コード化されていないとして割り当てられるように残された長方形スライスの数が、1だけ減らされる。このプロセスは、コード化されていないとして割り当てられるように残された長方形スライスの数がなくなるまで継続される。
図14は、様々な実施形態を実施することができる例示のマルチメディア通信システムのグラフィカル表示である。データソース1510は、アナログ、非圧縮デジタル、または圧縮デジタルフォーマット、またはこれらのフォーマットの任意の組合せのソース信号を提供する。エンコーダ1520は、ソース信号のデータフォーマット変換および/またはフィルタリングなどの前処理を含むかまたはそれに関連することができる。エンコーダ1520は、ソース信号をコード化メディアビットストリームにエンコードする。デコードされるべきビットストリームは、事実上任意のタイプのネットワーク内に配置されたリモートデバイスから直接または間接的に受け取ることができることに留意されたい。追加として、ビットストリームは、ローカルハードウェアまたはソフトウェアから受け取ることができる。エンコーダ1520は、オーディオおよびビデオなどの2つ以上のメディアタイプをエンコードすることができる可能性があり、または2つ以上のエンコーダ1520は、異なるメディアタイプのソース信号をコード化するのに必要とされることがある。エンコーダ1520はまた、グラフィックスおよびテキストなどの合成的に作成された入力を得ることができ、合成媒体のコード化されたビットストリームを生成することができる可能性がある。以下では、1つのメディアタイプの1つのコード化メディアビットストリームの処理のみが、説明を簡単にするために考慮される。しかしながら、一般に、実時間ブロードキャストサービスは、いくつかのストリーム(一般に、少なくとも1つのオーディオ、ビデオ、およびテキストサブタイトル付きストリーム)を含むことに留意されたい。システムは多くのエンコーダを含むことができるが、図では、一般性を失うことなく説明を簡単にするために1つのエンコーダ1520のみが示されていることにも留意されたい。本明細書に含まれるテキストおよび例はエンコーディングプロセスを具体的に説明し得るが、当業者は同じ概念および原理が、対応するデコーディングプロセスにも適用され、逆の場合も同じであることを理解するであろうことをさらに理解されたい。
コード化メディアビットストリームは、ストレージ1530に転送され得る。ストレージ1530は、コード化メディアビットストリームを格納するための任意のタイプのマスメモリを含むことができる。ストレージ1530内のコード化メディアビットストリームのフォーマットは、基本的な自己完結型ビットストリームフォーマットとすることができ、または1つまたは複数のコード化メディアビットストリームは、コンテナファイルにカプセル化することができ、またはコード化メディアビットストリームは、DASH(または同様のストリーミングシステム)に適し、セグメントのシーケンスとして格納されるセグメントフォーマットにカプセル化することができる。1つまたは複数のメディアビットストリームがコンテナファイルにカプセル化される場合、ファイル発生器(図に示されていない)を使用して、1つまたは複数のメディアビットストリームをファイルに格納し、ファイルフォーマットメタデータを作り出すことができ、ファイルフォーマットメタデータは、さらに、ファイルに格納され得る。エンコーダ1520またはストレージ1530は、ファイル発生器を含むことができ、またはファイル発生器は、エンコーダ1520またはストレージ1530のいずれかに動作可能に取り付けられる。いくつかのシステムは、「ライブで」動作し、すなわち、ストレージを省略し、エンコーダ1520からのコード化メディアビットストリームをセンダ1540に直接転送する。次いで、コード化メディアビットストリームは、必要に応じて、サーバとも呼ばれるセンダ1540に転送され得る。送信に使用されるフォーマットは、基本的な自己完結型ビットストリームフォーマット、パケットストリームフォーマット、DASH(または同様のストリーミングシステム)に適するセグメントフォーマットとすることができ、または1つまたは複数のコード化メディアビットストリームは、コンテナファイルにカプセル化され得る。エンコーダ1520、ストレージ1530、およびサーバ1540は、同じ物理デバイスに存在してもよく、または別個のデバイスに含まれてもよい。エンコーダ1520およびサーバ1540は、ライブ実時間コンテンツで動作することができ、その場合、コード化メディアビットストリームは、一般に、恒久的に格納されるのではなく、むしろ、コンテンツエンコーダ1520および/またはサーバ1540に短期間バッファされて、処理遅延、転送遅延、およびコード化メディアビットレートにおける変動を平滑化する。
サーバ1540は、通信プロトコルスタックを使用してコード化メディアビットストリームを送る。スタックは、限定はしないが、リアルタイムトランスポートプロトコル(RTP)、ユーザデータグラムプロトコル(UDP)、ハイパーテキストトランスファープロトコル(HTTP)、伝送制御プロトコル(TCP)、およびインターネットプロトコル(IP)のうちの1つまたは複数を含むことができる。通信プロトコルスタックがパケット指向である場合、サーバ1540は、コード化メディアビットストリームをパケットにカプセル化する。例えば、RTPが使用される場合、サーバ1540は、コード化メディアビットストリームを、RTPペイロードフォーマットに従ってRTPパケットにカプセル化する。一般に、各メディアタイプは、専用のRTPペイロードフォーマットを有する。システムは2つ以上のサーバ1540を含むことができるが、簡単さのために、以下の説明は1つのサーバ1540のみを考慮することに再度留意されたい。
メディアコンテンツが、ストレージ1530のためにまたはデータをセンダ1540に入力するためにコンテナファイルにカプセル化される場合、センダ1540は、「送信ファイルパーサ」(図に示されていない)を含むことができ、またはそれに動作可能に取り付けられ得る。特に、コンテナファイルがそのように送信されるのではなく、含まれるコード化メディアビットストリームのうちの少なくとも1つが、通信プロトコルを介した移送のためにカプセル化される場合、送信ファイルパーサは、通信プロトコルを介して搬送されるべきコード化メディアビットストリームの適切な部分を捜し出す。送信ファイルパーサはまた、パケットヘッダおよびペイロードなどの通信プロトコルの正しいフォーマットを作り出す際に役立つことができる。マルチメディアコンテナファイルは、含まれているメディアビットストリームのうちの少なくとも1つを通信プロトコルに基づいてカプセル化するために、ISOBMFFにおけるヒントトラックなどのカプセル化命令を含むことができる。
サーバ1540は、例えば、CDN、インターネット、および/または1つまたは複数のアクセスネットワークの組合せとすることができる通信ネットワークを通してゲートウェイ1550に接続される場合もされない場合もある。ゲートウェイは、さらにまたは代替として、ミドルボックスと呼ばれることがある。DASHでは、ゲートウェイは、エッジサーバ(CDNの)またはウェブプロキシとすることができる。システムは、一般に、任意の数のゲートウェイなどを含むことができるが、簡単のために、以下の説明は、1つのゲートウェイ1550のみを考慮することに留意されたい。ゲートウェイ1550は、ある通信プロトコルスタックによるパケットストリームの別の通信プロトコルスタックへの変換、データストリームのマージングおよびフォーキング、および現行のダウンリンクネットワーク状態に応じた転送ストリームのビットレートの制御などのダウンリンクおよび/またはレシーバ能力に応じたデータストリームの操作などの様々なタイプの機能を実行することができる。ゲートウェイ1550は、様々な実施形態のサーバエンティティとすることができる。
システムは、一般に、送信された信号を受信し、復調し、コード化メディアビットストリームにカプセル開放することができる1つまたは複数のレシーバ1560を含む。コード化メディアビットストリームは、記録ストレージ1570に転送され得る。記録ストレージ1570は、コード化メディアビットストリームを格納するために任意のタイプのマスメモリを含むことができる。記録ストレージ1570は、代替としてまたは付加的に、ランダムアクセスメモリなどの計算メモリを含むことができる。記録ストレージ1570内のコード化メディアビットストリームのフォーマットは、基本的な自己完結型ビットストリームフォーマットとすることができ、または1つまたは複数のコード化メディアビットストリームは、コンテナファイルにカプセル化され得る。互いに関連するオーディオストリームおよびビデオストリームなどの多数のコード化メディアビットストリームがある場合、コンテナファイルが、一般に、使用され、レシーバ1560は、入力ストリームからコンテナファイルを生成するコンテナファイル発生器を含むかまたはそれに取り付けられる。いくつかのシステムは、「ライブで」動作し、すなわち、記録ストレージ1570を省略し、レシーバ1560からのコード化メディアビットストリームをデコーダ1580に直接転送する。いくつかのシステムでは、記録されたストリームのうちの最新の部分のみ、例えば、記録されたストリームの最新の10分の抜粋のみが、記録ストレージ1570に維持され、一方、前の記録データは、記録ストレージ1570から廃棄される。
コード化メディアビットストリームは、記録ストレージ1570からデコーダ1580に転送され得る。互いに関連し、コンテナファイルにカプセル化されたオーディオストリームおよびビデオストリームなどの多くのコード化メディアビットストリームがあるか、または単一のメディアビットストリームが、例えば、より容易なアクセスのためにコンテナファイルにカプセル化される場合、ファイルパーサ(図に示されていない)を使用して、コンテナファイルからの各コード化メディアビットストリームをカプセル開放する。記録ストレージ1570またはデコーダ1580は、ファイルパーサを含むことができ、またはファイルパーサは、記録ストレージ1570またはデコーダ1580のいずれかに取り付けられる。システムは多くのデコーダを含むことができるが、ここでは、1つのデコーダ1570のみが、一般性を欠くことなく説明を簡単にするために論じられることにも留意されたい。
コード化メディアビットストリームは、デコーダ1570によってさらに処理することができ、デコーダの出力は、1つまたは複数の非圧縮メディアストリームである。最後に、レンダラ1590は、例えば、ラウドスピーカまたはディスプレイにより非圧縮メディアストリームを再生することができる。レシーバ1560、記録ストレージ1570、デコーダ1570、およびレンダラ1590は、同じ物理デバイスに存在してもよく、または別個のデバイスに含まれてもよい。
上述では、いくつかの実施形態は、VVC/H.266の用語を参照しておよび/またはそれを使用して説明された。実施形態は、同様に、任意のビデオエンコーダおよび/またはビデオデコーダを用いて実現され得ることを理解する必要がある。
上述では、いくつかの例示の実施形態が、特定のシンタックス構造および/またはシンタックス要素を参照して説明された。実施形態は他のシンタックス構造および/またはシンタックス要素を用いて同様に実現され得ることを理解する必要がある。例えば、実施形態がPPSシンタックスのシンタックス要素を参照して説明されている場合、実施形態は、SPSなどの別のシンタックス構造の同じまたは同様のシンタックス要素を用いて実現され得ることを理解する必要がある。
上述では、いくつかの実施形態が、表示という用語を参照して説明された。表示という用語は、ビットストリームにおけるまたはそれに沿った1つまたは複数のシンタックス構造における1つまたは複数のシンタックス要素のエンコードまたは生成として理解され得ることを理解する必要がある。
上述では、いくつかの実施形態が、デコーディングという用語を参照して説明された。デコーディングという用語は、ビットストリームからのまたはそれに沿った1つまたは複数のシンタックス構造からの1つまたは複数のシンタックス要素のデコーディングまたはパーシングとして理解され得ることを理解する必要がある。
上述では、例示の実施形態がエンコーダを参照して説明された場合、結果として生じるビットストリームおよびデコーダは、対応する要素をそれら中に有することができることを理解する必要がある。同様に、例示の実施形態がデコーダを参照して説明された場合、エンコーダが、デコーダによってデコードされるべきビットストリームを生成するための構造および/またはコンピュータプログラムを有することができることを理解する必要がある。例えば、いくつかの実施形態は、エンコーディングの一部として予測ブロックを生成することに関連して説明された。実施形態は、水平オフセットおよび垂直オフセットなどのコーディングパラメータがエンコーダによって決定されたよりもビットストリームからデコードされるという差を伴って、デコーディングの一部として予測ブロックを生成することによって同様に実現することができる。
上述の本発明の実施形態は、必要とされるプロセスの理解を助けるために別個のエンコーダ装置およびデコーダ装置の点からコーデックを説明している。しかしながら、装置、構造、および動作は、単一のエンコーダ-デコーダ装置/構造/動作として実施されてもよいことを理解されよう。さらに、コーダーおよびデコーダは、一部またはすべての共通要素を共有することができることが可能である。
上述の例は、本発明の実施形態が電子デバイス内のコーデック内で動作することを説明しているが、特許請求の範囲に定義されるような本発明は任意のビデオコーデックの一部として実施されてもよいことを理解されよう。したがって、例えば、本発明の実施形態は、固定または有線通信経路を介してビデオコーディングを実施することができるビデオコーデックで実施され得る。
したがって、ユーザ機器は、上述の本発明の実施形態で説明されたものなどのビデオコーデックを含むことができる。ユーザ機器という用語は、携帯電話、ポータブルデータ処理デバイス、または携帯ウェブブラウザなどの任意の適切なタイプの無線ユーザ機器を包含するように意図されることを理解されたい
さらに、公衆陸上移動通信網(PLMN)の要素は、上述のようなビデオコーデックを含むことができる。
一般に、本発明の様々な実施形態は、ハードウェアまたは専用回路、ソフトウェア、論理、またはそれらの任意の組合せで実施することができる。例えば、ある態様は、ハードウェアで実施することができ、一方、他の態様は、コントローラ、マイクロプロセッサ、または他のコンピューティングデバイスによって実行され得るファームウェアまたはソフトウェアで実施することができるが、本発明はそれらに限定されない。本発明の様々な態様がブロック図、流れ図、または他の図形表現の使用として図示および説明され得るが、本明細書に記載されたこれらのブロック、装置、システム、技法、または方法は、非限定的な例として、ハードウェア、ソフトウェア、ファームウェア、専用回路もしくは論理、汎用ハードウェアもしくはコントローラもしくは他のコンピューティングデバイス、またはそれらの組合せで実施することができることをよく理解されよう。
本発明の実施形態は、プロセッサエンティティ内などの携帯デバイスのデータプロセッサによって実行可能なコンピュータソフトウェアによって、またはハードウェアによって、またはソフトウェアとハードウェアの組合せによって実施され得る。さらに、これに関して、図におけるような論理フローの任意のブロックが、プログラムステップ、または相互接続されたロジック回路、ブロック、および機能、またはプログラムステップとロジック回路、ブロック、および機能との組合せを表すことができることに留意されたい。ソフトウェアは、メモリチップ、またはプロセッサ内に実装されたメモリブロックなどの物理媒体、ハードディスクまたはフロッピーディスクなどの磁気媒体、および例えばDVD、およびそのデータ変形のCDなどの光学媒体に格納され得る。
メモリは、ローカル技術環境に適する任意のタイプのものとすることができ、半導体ベースメモリデバイス、磁気メモリデバイスおよびシステム、光メモリデバイスおよびシステム、固定メモリおよびリムーバブルメモリなどの任意の適切なデータストレージ技術を使用して実装されてもよい。データプロセッサは、ローカル技術環境に適する任意のタイプのものとすることができ、非限定の例として、汎用コンピュータ、専用コンピュータ、マイクロプロセッサ、デジタル信号プロセッサ(DSP)、およびマルチコアプロセッサアーキテクチャに基づくプロセッサのうちの1つまたは複数を含むことができる。
本発明の実施形態は、集積回路モジュールなどの様々な構成要素で実践することができる。集積回路の設計は、概して、高度に自動化されたプロセスである。論理レベル設計を、半導体基板にエッチングおよび形成される準備ができた半導体回路設計に変換するために利用可能な複雑で強力なソフトウェアツールが利用可能である。
カリフォルニア州マウンテンビューのSynopsys, Inc.、およびカリフォルニア州サンノゼのCadence Designによって提供されるプログラムは、よく確立された設計ルールならびに事前格納された設計モジュールのライブラリを使用して、半導体チップ上で自動的に導体をルーティングし構成要素を配置する。半導体回路の設計が完了した後、標準電子フォーマット(例えば、Opus、GDSII,など)の結果として生じた設計は、製造のために半導体製造設備または「fab」に送られ得る。
前述の説明は、例示的および非限定的な例として、本発明の例示的な実施形態の完全で有益な説明を提供した。しかしながら、前述の説明に鑑みて、添付の図面および添付の特許請求の範囲とともに読むとき、様々な変更および改変が当業者には明らかになるであろう。しかしながら、本発明の教示のすべてのそのようなおよび類似する変更は、依然として、本発明の範囲内にあることになる。