[0027] 本開示は、ビデオコーディングおよび圧縮のための技法を含む。特に、本開示は、ビデオデータのパレットベースコーディングのための技法について説明する。従来のビデオコーディングにおいて、画像(images)は、連続的色調(continuous-tone)で空間的に滑らか(spatially smooth)であると仮定される。これらの仮定に基づいて、ブロックベースの変換、フィルタ処理など、様々なツールが開発されており、そのようなツールは、自然コンテンツビデオに対して良好な性能を示している。
[0028] しかしながら、リモートデスクトップ、協調ワークおよびワイヤレスディスプレイのような用途では、(例えば、テキストまたはコンピュータグラフィックスなどの)コンピュータ生成されたスクリーンコンテンツが、圧縮されるべき支配的コンテンツであり得る。このタイプのコンテンツは、不連続な色調を有し、鋭利なラインと高コントラストのオブジェクト境界とを特徴とする傾向がある。連続的色調および滑らかさという仮定はもはやスクリーンコンテンツに対しては当てはまらないことがあり、従って、従来のビデオコーディング技法は、スクリーンコンテンツを含むビデオデータを圧縮するための効率的な方法ではないことがある。
[0029] 本開示は、1つまたは複数の従来のコーディングツールが非効率的であるスクリーン生成されたコンテンツコーディングまたは他のコンテンツに特に好適であり得るパレットベースコーディング(palette-based coding)について説明するものである。ビデオデータのパレットベースコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディング(inter- or intra-predictive coding)のための技法など、1つまたは複数の他のコーディング技法とともに使用され得る。例えば、以下でより詳細に説明されるように、エンコーダもしくはデコーダ、または複合エンコーダデコーダ(コーデック)は、インター予測コーディングおよびイントラ予測コーディング、並びにパレットベースコーディングを行うように構成され得る。
[0030] いくつかの例において、パレットベースコーディング技法は、1つまたは複数のビデオコーディング規格とともに使用するために構成され得る。例えば、高効率ビデオコーディング(HEVC)は、ITU−Tビデオコーディングエキスパートグループ(VCEG)とISO/IECモーションピクチャエキスパートグループ(MPEG)とのジョイントコラボレーションチームオンビデオコーディング(JCT−VC)によって開発されている新しいビデオコーディング規格である。最近のHEVCテキスト仕様ドラフトは、Bross他、「High Efficiency Video Coding (HEVC) Text Specification Draft 10 (for FDIS & Consent)」、JCVC−L1003_v13、ITU−T SG16 WP 3とISO/IEC JCT 1/SC 29/WG 11とのJCT−VCの第12回会合、2013年1月14〜23日(「HEVC Draft 10」)に記載されている。
[0031] HEVCフレームワークに関して、一例として、パレットベースコーディング技法は、コーディングユニット(CU:coding unit)モードとして使用されるように構成され得る。他の例において、パレットベースコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。従って、CUモードのコンテキストにおいて説明する以下の開示するプロセスの全ては、追加または代替として、PUに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明するパレットベースコーディング技法の制約または制限であると見なされるべきではなく、なぜなら、そのような技法は、他の既存のシステム/規格またはまだ開発されていないシステム/規格とは独立にまたはそれらの一部として働くように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形ブロック、長方形ブロック、またはさらには非長方形形状の領域であり得る。
[0032] パレットベースコーディングにおいて、ビデオデータの特定のエリアは比較的少数の色を有すると仮定され得る。ビデオコーダ(ビデオエンコーダまたはビデオデコーダ)は、特定のエリア(例えば、所与のブロック)のビデオデータを表すための色のテーブルとして、いわゆる「パレット」をコーディングし得る。各ピクセルは、ピクセルの色を表すパレット中のエントリに関連付けられ得る。例えば、ビデオコーダは、ピクセル値をパレット中の適切な値に関係付けるインデックスをコーディングし得る。
[0033] 上記の例において、ビデオエンコーダは、ブロックのためのパレットを決定することと、各ピクセルの値を表すためのパレット中のエントリを位置特定することと、ピクセル値をパレットに関係付けるピクセルのインデックス値でパレットを符号化することとによって、ビデオデータのブロックを符号化し得る。ビデオデコーダは、符号化ビットストリームから、ブロックのためのパレット、並びにブロックのピクセルのインデックス値を取得し得る。ビデオデコーダは、ブロックのピクセル値を再構成するために、ピクセルのインデックス値をパレットのエントリに関係付け得る。ピクセル(および/またはピクセル値を示す関係するインデックス値)は、一般にサンプルと呼ばれることがある。
[0034] ブロック中のサンプルは、水平ラスタ走査順序(horizontal raster scanning order)を使用して処理される(例えば、走査される)と仮定される。例えば、ビデオエンコーダは、水平ラスタ走査順序を使用してインデックスを走査することによってインデックスの2次元ブロックを1次元アレイに変換し得る。同様に、ビデオデコーダは、水平ラスタ走査順序を使用してインデックスのブロックを再構成(reconstruct)し得る。従って、本開示は、走査順序でブロック中の現在コード化されているサンプルに先行するサンプルとして前のサンプルを参照し得る。垂直ラスタ走査順序など、水平ラスタサン(horizontal raster san)以外の走査も適用可能であり得ることを諒解されたい。上記の例は、パレットベースコーディングの全般的な説明を与えるを意図される。
[0035] パレットは、典型的には、インデックスで番号付けされ(例えば、少なくともRGB、YUVなどの1つの成分上の)少なくとも1つの色成分値または強度を表すエントリを含む。ビデオエンコーダとビデオデコーダの両方は、パレットエントリの数と、各パレットエントリの色成分値と、現在のブロックのためのパレットエントリの正確な順序付けとを決定する。本開示では、各パレットエントリがサンプルの全ての色成分のための値を指定すると仮定される。但し、本開示の概念は、色成分ごとに別個のパレットを使用することに適用可能である。
[0036] いくつかの例において、パレットは、以前コード化されたブロックまたは以前コード化されたパレットからの情報を使用して作成され得る。すなわち、パレットは、前のブロックをコーディングするために使用されるパレットから予測される予測パレットエントリ(predicted palette entries)を含んでいることがある。例えば、標準サブミッション文書、Wei Puら、「AHG10: Suggested Software for Palette Coding based on RExt6.0」、JCTVC−Q0094、バレンシア、スペイン、2014年3月27日〜4月4日(以下、JCTVC−Q0094)に記載されているように、パレットは、予測子パレット(predictor palette)からコピーされたエントリを含み得る。予測子パレットは、パレットモードを使用して以前コード化されたブロックまたは他の再構成されたサンプルからのパレットエントリを含み得る。予測子パレットは、以前コード化されたパレットの全部もしくは一部を使用し得るか、またはいくつかの以前コード化されたパレットのエントリから作成され得る。
[0037] いくつかの例では、予測子パレット中の各エントリについて、フラグに関連するエントリが現在のパレットにコピーされる(例えば、フラグ=1によって示される)かどうかを示すためにバイナリフラグがコード化され得る。バイナリフラグのストリングはバイナリパレット予測ベクトルと呼ばれることがある。現在のブロックをコーディングするためのパレットはまた、(例えば、パレット予測ベクトルとは別個に)明示的にコード化され得る、新しいパレットエントリの数を含み得る。新しいエントリの数の指示もコーディングされ得る。予測エントリと新しいエントリとの和はブロックの全パレットサイズを示し得る。
[0038] 提案されたJCTVC−Q0094のように、パレットベースコーディングモードでコード化されるブロック中の各サンプルは、以下に記載されるように、3つのパレットモードのうちの1つを使用してコード化され得る。
エスケープモード:このモードにおいて、サンプル値はパレットエントリとしてパレット中に含められず、量子化されたサンプル値が全ての色成分について明示的にシグナリングされる。それは新しいパレットエントリのシグナリングと同様であるが、新しいパレットエントリについて、色成分値は量子化されない。
コピーモード(CopyFromTopモードまたはCopyAboveモードとも呼ばれる):このモードにおいて、現在のサンプルのためのパレットエントリインデックスは、ブロック中で直接上方に位置するサンプルからコピーされる。
ランモード(インデックスモード、値モード、または左からのコピーモードとも呼ばれる):このモードにおいて、パレットエントリインデックスの値は明示的にシグナリングされる。同じ値を有する後続の連続するインデックスの数の数のランもシグナリングされ得る。
[0039] 本明細書で説明するパレットエントリインデックス(palette entry index)は、パレットインデックスと呼ばれるかまたは単にインデックスと呼ばれることがある。これらの用語は、本開示の技法について説明するために同義で使用され得る。さらに、以下でより詳細に説明するように、パレットインデックスは、1つまたは複数の関連する色値または強度値を有し得る。例えば、パレットインデックスは、ピクセルの単一の色成分または強度成分(例えば、RGBデータの赤成分、YUVデータのY成分など)に関連する単一の関連する色値または強度値を有し得る。別の例において、パレットインデックスは、複数の関連する色値または強度値を有し得る。いくつかの事例において、パレットベースコーディングはモノクロームビデオをコーディングするために適用され得る。従って、「色値」は、一般に、ピクセル値を生成するために使用されるどんな色成分または非色成分をも指し得る。
[0040] コピーモードおよびランモードでは、ラン値(単にランと呼ばれることもある)もシグナリングされ得る。ラン値は、一緒にコード化される、パレットコード化ブロック(palette-coded block)中の特定の走査順序で連続するサンプル(例えば、サンプルのラン)の数を示し得る。いくつかの事例において、ランの各サンプルはパレットへの関連するインデックスを有するので、サンプルのランはパレットインデックスのランと呼ばれることもある。
[0041] ラン値は、同じパレットコーディングモードを使用してコード化されるパレットインデックスのラン(a run of palette indices)を示し得る。例えば、ランモードに関して、ビデオコーダ(ビデオエンコーダまたはビデオデコーダ)は、パレットインデックス(パレットインデックス値または単にインデックス値とも呼ばれる)と、同じパレットインデックスを有しそのパレットインデックスでコード化されている、走査順序で連続するサンプルの数を示すラン値とをコーディングし得る。コピーモードに関して、ビデオコーダは、上方に近隣するサンプル(例えば、ブロック中の現在コード化されているサンプルの上方にあるサンプル)のインデックスと、上方に近隣するサンプルからパレットインデックスをやはりコピーしそのパレットインデックスでコード化されている、走査順序で連続するサンプルの数を示すラン値とに基づいて、現在のサンプル値のためのインデックスがコピーされるという指示をコーディングし得る。従って、上記の例において、パレットインデックスのランは、同じ値を有するパレットインデックスのラン、または上方に近隣するパレットインデックス(above-neighboring palette indices)からコピーされたパレットインデックスのランを指す。
[0042] 従って、ランは、所与のモードについて、同じモードに属する後続のサンプルの数を指定し得る。いくつかの事例において、インデックスとラン値とをシグナリングすることはランレングスコーディング(run length coding)と同様であり得る。説明のための一例において、ブロックの連続するインデックスのストリングは0、2、2、2、2、5であり得る(例えば、ここで、各インデックスはブロック中のサンプルに対応する)。この例において、ビデオコーダは、ランモードを使用して第2のサンプル(例えば、2の第1のインデックス値)をコーディングし得る。2に等しいインデックスをコーディングした後に、ビデオコーダは、3つの後続のサンプルも2の同じインデックス値を有することを示す、3のランをコーディングし得る。同様にして、コピーモードを使用してインデックスをコーディングした後に4のランをコーディングすることは、現在コード化されているサンプル位置の上方の行中の対応するインデックスから合計5つのインデックスがコピーされることを示し得る。
[0043] 以下でより詳細に説明するように、ビデオコーダ(例えば、ビデオエンコーダおよびビデオデコーダ)は、サンプルがサンプルごとにエスケープサンプル(escape samples)としてコード化される(coded)かどうかを示すデータを符号化(encode)または復号(decode)し得る。エスケープサンプル(エスケープピクセル(escape pixels)とも呼ばれる)は、ブロックをコーディングするためのパレット中に表される対応する色を有しないブロックのサンプル(またはピクセル)であり得る。従って、エスケープサンプルは、パレットからの色エントリ(またはピクセル値)を使用して再構成されないことがある。代わりに、エスケープサンプルの色値は、パレットの色値とは別個にビットストリーム中でシグナリングされる。一般に、「エスケープモード」を使用してサンプルをコーディングすることは、一般に、ブロックをコーディングするためのパレット中に表される対応する色を有しないブロックのサンプルをコーディングすることを指し得る。上述したように、そのようなサンプルはエスケープサンプルまたはエスケープピクセルと呼ばれることがある。
[0044] いくつかの例において、ビデオコーダは、サンプルがエスケープサンプルとしてコード化されるかどうかを示す各サンプルのためのフラグ(この技法は明示的エスケープシグナリングと呼ばれることがある)と、それに続いてエスケープサンプル値とをコーディングし得る。別の例において、ビデオコーダは、特定のサンプルがエスケープサンプルとしてコード化されることを示すためのパレットのための追加のインデックス値をコーディングし得る(この技法は暗黙的エスケープシグナリング(implicit escape signaling)と呼ばれることがある)。
[0045] 本開示は、パレットベースビデオコーディングに関係する様々な技法について説明する。いくつかの態様において、本開示は、パレットベースコーディングの新しいモード、すなわち、「前の行からのコピー」モードのための技法を含む。例えば、本開示は、パレットベースビデオコーディングの既存のモード(例えば、ランモード、コピーモードまたはエスケープモードなどが上記で説明する)に前の行からのコピーモードを追加することをサポートし得る。本明細書で説明する前の行からのコピーモードは、既存のパレットベースコーディングモードと比較して拡張されたパレットベースコーディング能力を(ビデオエンコーダまたはビデオデコーダなどの)ビデオコーディングデバイスに提供し得る。
[0046] 例えば、上述の前の行からのコピーモードは、ビデオコーダ(例えば、ビデオエンコーダまたはビデオデコーダ)が、ブロック中で現在コード化されているインデックスのラインに直接隣接しないインデックスのラインから1つまたは複数のインデックスをコピーすることを可能にし得る。一例において、ビデオコーディングデバイスは、ビデオデータのブロック(a block of video data)を復号するためのパレット(a palette)を決定することと、ここで、パレットが、それぞれのパレットインデックスをそれぞれ有する1つまたは複数のパレットエントリを含む、ビデオデータのブロックの第1のピクセル(first pixels of the block of video data)のためのパレットインデックスの参照ラン(a reference run of palette indices)を決定することと、参照ランに基づいてビデオデータのブロックの第2のピクセル(second pixels of the block of video data)のためのパレットインデックスの現在のラン(a current run of palette indices)を決定することとを行い得る。より具体的には、現在のランを決定するために、ビデオコーディングデバイスは、参照インデックス(a reference index)が現在のランの最初のインデックス(the initial index of the current run)から少なくとも1つのライン離間するように、参照ラン中に含まれる参照インデックスを位置特定し得る。さらに、ビデオコーディングデバイスは参照ランのランレングス(a run length of the reference run)を決定し得、ここで、参照ランの最後のインデックス(a final index of the reference run)は、ブロック中で現在のランの最初のインデックスから少なくとも1つのインデックスだけ離れる。ビデオコーディングデバイスは、参照ラン中に含まれるインデックスをパレットインデックスの現在のランとしてコピーし、パレットを使用してパレットインデックスのコピーされた現在のランにマッピングされたブロックのピクセルをコーディングし得る。
[0047] 従って、いくつかの例において、前の行からのコピーモード(the copy from previous rows mode)は、インデックスをコーディングするときの追加のフレキシビリティを提供し得、それによりコーディング効率が改善され得る。いくつかの例において、本明細書で説明する技法は、コピーモードによって提供される潜在的参照ピクセル(potential reference pixels)上の冗長性を低減するかまたは潜在的になくすために、潜在的参照ピクセルの範囲(または「ダイナミックレンジ」)を制約し得る。例えば、本技法は、以前コード化されたピクセルの特定の行が、現在のピクセルのための全ての可能な参照ピクセルランとは異なるランに属する状況を識別し得る。この例において、本技法は、コーディングデバイスが、参照インデックスの探索範囲(a search range for the reference index)から特定の行を先制してなくす(preemptively eliminate)ことを可能にし、それにより、プロセッサクロックサイクルおよびメモリアクセスなどのコンピューティングリソースが節約され得る。従って、本開示の技法は、ビデオコーディングデバイスがコンピューティングリソースを効率的な方法で利用することを可能にしながら既存のパレットベースコーディング技術を改善し得る。
[0048] 本開示の他の態様は、ピクセルのために使用される特定のパレットコーディングモードを識別する情報をコーディングするための技法を含む。例えば、本技法は、ビデオコーディングデバイスが、本明細書で説明する前の行からのコピーモードを含めて、様々なパレットコーディングモードの各々を識別するためにユニーク切捨単項コードワード(a unique truncated unary codeword)を使用することを可能にする。本明細書で開示する技法の様々な実施形態によれば、ビデオコーディングデバイスは、パレットコード化ブロックのピクセル(a pixel of a palette-coded block)のために使用される特定のパレットベースコーディングモード(a particular palette-based coding mode)を識別するためにコード化される切捨単項コードワードの1つまたは複数のビンに対応するコンテキストを導出し得る。
[0049] いくつかの例において、本技法は、ビデオコーディングデバイスが、パレットコード化ブロックのためにいくつの異なる切捨単項コードワードがコード化されるべきかを決定するためにブロックのためのパレットのサイズを使用することを可能にし得る。パレットサイズが所定のしきい値サイズ内であるシナリオにおいて、ビデオコーディングデバイスは、シングルビットで表され得る範囲内になるように切捨単項コードワードの数を限定するように本技法を実施し得る。このようにして、本技法は、ビデオコーディングデバイスが、パレットコード化ブロックのためのパレットのサイズに基づいてコンピューティングリソースを節約し、ビットレート要件を低減することを可能にし得る。
[0050] 本開示のいくつかの態様は、パレットインデックスのランレングスコーディングの効率を高めることを意図する。例えば、既存のパレットベースコーディング技法によれば、ランレングスは明示的にコード化され、符号化ビデオビットストリーム中でシグナリングされ得る。しかしながら、ランレングスの明示的シグナリングは潜在的な非効率性を生じ得る。例えば、比較的長いランレングスは、明示的にシグナリングするために比較的大きいビット数を必要とし得る。ランレングスコーディングに関連するビットレート要件を緩和するために、本開示の技法は、ランレングスをコーディングするときにランレングス制約を課すことを含み得る。ランレングス制約は、特定のパレットモードと併せて適用され得る。例えば、本技法は、参照ランと現在のランとの間のマッチングランレングスがランレングスしきい値を満たすか否かに基づいて、パレットベースビデオコーディングのために特定のパレットモード(例えば、本明細書で説明する前の行からのコピーモード)を有効化することを含み得る。
[0051] 説明のための一例において、ビデオコーディングデバイスは、モードのランレングスがしきい値に等しいかまたはそれよりも大きいと決定することに基づいて、前の行からのコピーモードを有効化し得る。この例において、ビデオエンコーダは、実際のマッチングランレングスとしきい値との間の差分を符号化し、送信し得る。以下でさらに詳細に説明するように、最小のランしきい値が変数「T」によって示される場合、ビデオエンコーダは、「K」によって示される差分値をビットストリーム中で1つまたは複数のビデオデコーダに送信し得る。この例において、K=(N−T)、ここで、Nは実際のマッチングランレングスである。対応して、Kの値を受信したビデオデコーダは、以下の式を解くことによって、実際のマッチングランレングスNを導出し得る:N=K+T。従って、上記の例では、ランレングスを示すために(例えば、しきい値なしのコーディングに対して)より少ないビット数が使用され得る。従って、本開示の技法は、いくつかの例において、以下でより詳細に説明するように、いくつかのパレットコーディングモードでランレングスをコーディングするときの効率を改善し得る。
[0052] 公開された米国特許出願公開第2014/0301475号およびそれの相対物である国際特許出願第PCT/US2014/33019号は、パレットベースビデオコーディング技法について説明している。いくつかの例において、本開示の技法は、そのような文献において説明されている1つまたは複数の技法の拡張として使用され得る。
[0053] 図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用する「ビデオコーダ」という用語は、総称的にビデオエンコーダとビデオデコーダの両方を指す。本開示において、「ビデオコーディング」または「コーディング」という用語は、総称的にビデオ符号化またはビデオ復号を指すことがある。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示で説明する様々な例に従ってパレットベースビデオコーディングのための技法を行うように構成され得るデバイスの例を表す。例えば、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースコーディングまたは非パレットベースコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUなど、ビデオデータの様々なブロックを選択的にコーディングするように構成され得る。非パレットベースコーディングモードは、HEVCドラフト10によって規定される様々なコーディングモードなど、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指し得る。
[0054] 図1に示されているように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は符号化ビデオデータを生成する。従って、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれることがある。宛先デバイス14は、ソースデバイス12によって生成された符号化ビデオデータを復号し得る。従って、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれることがある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
[0055] ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(例えば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備え得る。
[0056] 宛先デバイス14は、チャネル16を介してソースデバイス12から符号化ビデオデータを受信し得る。チャネル16は、ソースデバイス12から宛先デバイス14に符号化ビデオデータを移動することが可能な1つまたは複数の媒体またはデバイスを備え得る。一例において、チャネル16は、ソースデバイス12が符号化ビデオデータを宛先デバイス14にリアルタイムで直接送信することを可能にする1つまたは複数の通信媒体を備え得る。この例において、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化ビデオデータを変調し得、変調されたビデオデータを宛先デバイス14に送信し得る。1つまたは複数の通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路など、ワイヤレスおよび/またはワイヤード通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(例えば、インターネット)など、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を可能にする、ルータ、スイッチ、基地局、または他の機器を含み得る。
[0057] 別の例において、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶する記憶媒体を含み得る。この例において、宛先デバイス14は、ディスクアクセスまたはカードアクセスを介して記憶媒体にアクセスし得る。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化ビデオデータを記憶するための他の適切なデジタル記憶媒体など、様々なローカルにアクセスされるデータ記憶媒体を含み得る。
[0058] さらなる例において、チャネル16は、ソースデバイス12によって生成された符号化ビデオデータを記憶するファイルサーバまたは別の中間ストレージデバイスを含み得る。この例において、宛先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは他の中間ストレージデバイスに記憶された符号化ビデオデータにアクセスし得る。ファイルサーバは、符号化ビデオデータを記憶することと、符号化ビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的なファイルサーバとしては、(例えば、ウェブサイト用の)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブがある。
[0059] 宛先デバイス14は、インターネット接続などの標準的なデータ接続を通して符号化ビデオデータにアクセスし得る。例示的なタイプのデータ接続としては、ファイルサーバに記憶された符号化ビデオデータにアクセスするのに好適である、ワイヤレスチャネル(例えば、Wi−Fi(登録商標)接続)、ワイヤード接続(例えば、DSL、ケーブルモデムなど)、または両方の組合せがあり得る。ファイルサーバからの符号化ビデオデータの送信は、ストリーミング送信、ダウンロード送信、または両方の組合せであり得る。
[0060] 本開示の技法は、ワイヤレス適用例または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、例えばインターネットを介したストリーミングビデオ送信、データ記憶媒体に記憶するためのビデオデータの符号化、データ記憶媒体に記憶されたビデオデータの復号、または他の適用例など、様々なマルチメディア適用例をサポートするビデオコーディングに適用され得る。いくつかの例において、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオテレフォニーなどの適用例をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
[0061] 図1に示されているビデオコーディングシステム10は一例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間のデータ通信を必ずしも含むとは限らないビデオコーディング設定(例えば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データが、ローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。ビデオ符号化デバイスはデータを符号化し、メモリに記憶し得、および/またはビデオ復号デバイスはメモリからデータを取り出し、復号し得る。多くの例において、符号化および復号は、互いに通信しないが、メモリにデータを符号化し、および/またはメモリからデータを取り出して復号するだけであるデバイスによって行われる。
[0062] 図1の例において、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例において、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、例えばビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオデータを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/もしくはビデオデータを生成するためのコンピュータグラフィックスシステム、またはビデオデータのそのようなソースの組合せを含み得る。
[0063] ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例において、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化ビデオデータを直接送信する。他の例において、符号化ビデオデータはまた、復号および/または再生のための宛先デバイス14による後のアクセスのために記憶媒体またはファイルサーバ上に記憶され得る。
[0064] 図1の例において、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例において、入力インターフェース28は受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して符号化ビデオデータを受信し得る。ディスプレイデバイス32は、宛先デバイス14と一体化され得るか、またはその外部にあり得る。一般に、ディスプレイデバイス32は復号ビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなど、様々なディスプレイデバイスを備え得る。
[0065] 本開示は全般に、ビデオエンコーダ20が、ある情報をビデオデコーダ30などの別のデバイスに「シグナリングすること」または「送信すること」に言及することがある。「シグナリング」または「送信」という用語は、一般に、圧縮されたビデオデータを復号するために使用されるシンタックス要素および/または他のデータの通信を指し得る。そのような通信は、リアルタイムまたはほぼリアルタイムで行われ得る。代替的に、そのような通信は、符号化時に符号化ビットストリーム中でシンタックス要素をコンピュータ可読記憶媒体に記憶するときに行われることがあるなど、ある時間期間にわたって行われ得、次いで、これらの要素は、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。従って、ビデオデコーダ30は、ある情報を「受信する」ものとして参照され得るが、情報の受信は、必ずしもリアルタイムまたはほぼリアルタイムで行われるとは限らず、記憶の後の何らかの時間に媒体から取り出されることがある。
[0066] ビデオエンコーダ20およびビデオデコーダ30は各々、1つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェア、またはそれらの任意の組合せなどの様々な好適な回路のいずれかとして実施され得る。本技法が部分的にソフトウェアで実施される場合、デバイスは、好適な非一時的コンピュータ可読記憶媒体にソフトウェアの命令を記憶し得、1つまたは複数のプロセッサを使用してその命令をハードウェアで実行して、本開示の技法を行い得る。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアとの組合せなどを含む)上記のいずれも、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合され得る。
[0067] いくつかの例において、ビデオエンコーダ20およびビデオデコーダ30は、上記で言及されHEVCドラフト10に記載されたHEVC規格など、ビデオ圧縮規格に従って動作する。ベースHEVC規格に加えて、HEVCのためのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を作成するための作業が進行中である。さらに、例えば本開示で説明するような、パレットベースコーディングモードが、HEVC規格の拡張のために提供され得る。いくつかの例において、パレットベースコーディングのための本開示で説明する技法は、ITU−T−H.264/AVC規格または将来の規格など、他のビデオコーディング規格に従う動作のために構成されるエンコーダおよびデコーダに適用され得る。従って、例として、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングのためのパレットベースコーディングモードの適用例について説明する。
[0068] HEVCおよび他のビデオコーディング規格において、ビデオシーケンスは、通常、一連のピクチャを含む。ピクチャは「フレーム」と呼ばれることもある。ピクチャは、SL、SCbおよびSCrと示される、3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」サンプルと呼ばれることもある。他の例において、ピクチャはモノクロームであり得、ルーマサンプルのアレイのみを含み得る。
[0069] ピクチャの符号化表現を生成するために、ビデオエンコーダ20は、コーディングツリーユニット(CTU)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロックと、クロマサンプルの2つの対応するコーディングツリーブロックと、それらのコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造とであり得る。コーディングツリーブロックはサンプルのN×Nブロックであり得る。CTUは「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれることもある。HEVCのCTUは、H.264/AVCなどの他の規格のマクロブロックに広い意味で類似し得る。しかしながら、CTUは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、ラスタ走査において連続的に順序付けられた整数個のCTUを含み得る。コード化スライスは、スライスヘッダとスライスデータとを備え得る。スライスのスライスヘッダは、スライスについての情報を提供するシンタックス要素を含むシンタックス構造であり得る。スライスデータは、スライスのコード化CTUを含み得る。
[0070] 本開示は、サンプルの1つまたは複数のブロックのサンプルをコーディングするために使用される1つまたは複数のサンプルブロックとシンタックス構造とを指すために、「ビデオユニット」または「ビデオブロック」または「ブロック」という用語を使用し得る。例示的なタイプのビデオユニットまたはブロックとしては、CTU、CU、PU、変換ユニット(TU)、マクロブロック、マクロブロックパーティションなどがあり得る。いくつかのコンテキストにおいて、PUの説明は、マクロブロックまたはマクロブロックパーティションの説明と交換され得る。
[0071] コード化CTUを生成するために、ビデオエンコーダ20は、コーディングツリーブロックをコーディングブロックに分割するために、CTUのコーディングツリーブロックに対して4分木区分を再帰的に行い得、従って「コーディングツリーユニット」という名称がある。コーディングブロックはサンプルのN×Nブロックである。CUは、ルーマサンプルアレイ、CbサンプルアレイおよびCrサンプルアレイを有するピクチャの、ルーマサンプルのコーディングブロックと、クロマサンプルの2つの対応するコーディングブロックと、それらのコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造とであり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分し得る。予測ブロックは、同じ予測が適用されるサンプルの長方形(すなわち、正方形または非正方形)ブロックであり得る。CUの予測ユニット(PU)は、ピクチャのルーマサンプルの予測ブロックと、クロマサンプルの2つの対応する予測ブロックと、それらの予測ブロックサンプルを予測するために使用されるシンタックス構造とであり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロック、Cb予測ブロックおよびCr予測ブロックのための予測ルーマブロック、予測Cbブロックおよび予測Crブロックを生成し得る。
[0072] ビデオエンコーダ20は、PUの予測ブロックを生成するためにイントラ予測またはインター予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャの復号サンプルに基づいてPUの予測ブロックを生成し得る。
[0073] ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUに関連付けられたピクチャ以外の1つまたは複数のピクチャの復号サンプルに基づいてPUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために単予測または双予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV)を有し得る。ビデオエンコーダ20がPUの予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
[0074] ビデオエンコーダ20がCUの1つまたは複数のPUのための予測ブロック(例えば、予測ルーマブロック、予測Cbブロックおよび予測Crブロック)を生成した後に、ビデオエンコーダ20は、CUの残差ブロックを生成し得る。CUの残差ブロック中の各サンプルは、CUのPUの予測ブロック中のサンプルと、CUのコーディングブロック中の対応するサンプルとの間の差分を示し得る。例えば、ビデオエンコーダ20は、CUのルーマ残差ブロックを生成し得る。CUのルーマ残差ブロック中の各サンプルは、CUの予測ルーマブロックのうちの1つの中のルーマサンプルと、CUの元のルーマコーディングブロック中の対応するサンプルとの間の差分を示す。さらに、ビデオエンコーダ20は、CUのCb残差ブロックを生成し得る。CUのCb残差ブロック中の各サンプルは、CUの予測Cbブロックのうちの1つの中のCbサンプルと、CUの元のCbコーディングブロック中の対応するサンプルとの間の差分を示し得る。ビデオエンコーダ20はまた、CUのCr残差ブロックを生成し得る。CUのCr残差ブロック中の各サンプルは、CUの予測Crブロックのうちの1つの中のCrサンプルと、CUの元のCrコーディングブロック中の対応するサンプルとの間の差分を示し得る。
[0075] さらに、ビデオエンコーダ20は、CUの残差ブロック(例えば、ルーマ残差ブロック、Cb残差ブロックおよびCr残差ブロック)を1つまたは複数の変換ブロック(例えば、ルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロック)に分解するために、4分木区分を使用し得る。変換ブロックは、同じ変換が適用されるサンプルの長方形ブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロックと、クロマサンプルの2つの対応する変換ブロックと、それらの変換ブロックサンプルを変換するために使用されるシンタックス構造とであり得る。従って、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに関連付けられ得る。TUに関連付けられたルーマ変換ブロックはCUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。
[0076] ビデオエンコーダ20は、TUのための係数ブロックを生成するために、変換ブロックに1つまたは複数の変換を適用し得る。係数ブロックは、変換係数の2次元アレイであり得る。変換係数はスカラー量であり得る。例えば、ビデオエンコーダ20は、TUのためのルーマ係数ブロックを生成するために、TUのルーマ変換ブロックに1つまたは複数の変換を適用し得る。ビデオエンコーダ20は、TUのためのCb係数ブロックを生成するために、TUのCb変換ブロックに1つまたは複数の変換を適用し得る。ビデオエンコーダ20は、TUのためのCr係数ブロックを生成するために、TUのCr変換ブロックに1つまたは複数の変換を適用し得る。
[0077] 係数ブロック(例えば、ルーマ係数ブロック、Cb係数ブロックまたはCr係数ブロック)を生成した後に、ビデオエンコーダ20は係数ブロックを量子化し得る。量子化は、一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を実現するプロセスを指す。ビデオエンコーダ20が係数ブロックを量子化した後に、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化得る。例えば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC)を行い得る。ビデオエンコーダ20は、エントロピー符号化シンタックス要素をビットストリーム中に出力し得る。ビットストリームはまた、エントロピー符号化されないシンタックス要素を含み得る。
[0078] ビデオエンコーダ20は、エントロピー符号化シンタックス要素を含むビットストリームを出力し得る。ビットストリームは、コード化ピクチャおよび関連するデータの表現を形成するビットのシーケンスを含み得る。ビットストリームは、ネットワークアブストラクションレイヤ(NAL:network abstraction layer)ユニットのシーケンスを備え得る。NALユニットの各々はNALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP:raw byte sequence payload)をカプセル化する。NALユニットヘッダは、NALユニットタイプコードを示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって指定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを含んでいるシンタックス構造であり得る。いくつかの事例において、RBSPは0ビットを含む。
[0079] 異なるタイプのNALユニットは異なるタイプのRBSPをカプセル化し得る。例えば、第1のタイプのNALユニットはピクチャパラメータセット(PPS:picture parameter set)のためのRBSPをカプセル化し得、第2のタイプのNALユニットは、コード化スライスのためのRBSPをカプセル化し得、第3のタイプのNALユニットは補足エンハンスメント情報(SEI:supplemental enhancement information)のためのRBSPをカプセル化し得、以下同様である。(パラメータセットおよびSEIメッセージのためのRBSPではなく)ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれることがある。
[0080] ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。さらに、ビデオデコーダ30は、ビットストリームからシンタックス要素を取得し得る。例えば、ビデオデコーダ30は、ビットストリームをパースして、ビットストリームからシンタックス要素を復号し得る。ビデオデコーダ30は、ビットストリームから取得(例えば、復号)されたシンタックス要素に少なくとも部分的に基づいてビデオデータのピクチャを再構成し得る。ビデオデータを再構成するためのプロセスは、一般に、ビデオエンコーダ20によって行われるプロセスの逆であり得る。
[0081] 例えば、ビデオデコーダ30は、現在のCUのPUのための予測サンプルブロック(すなわち、予測ブロック)を決定するためにPUのMVを使用し得る。さらに、ビデオデコーダ30は、現在のCUのTUに関連付けられた変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、現在のCUのTUに関連付けられる変換ブロックを再構成するために、変換係数ブロックに対して逆変換を行い得る。ビデオデコーダ30は、現在のCUのPUのための予測サンプルブロックのサンプルを現在のCUのTUの変換ブロックの対応するサンプルに加算することによって、現在のCUのコーディングブロックを再構成し得る。ピクチャの各CUのコーディングブロックを再構成することによって、ビデオデコーダ30はピクチャを再構成し得る。
[0082] いくつかの例において、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースコーディングを行うように構成され得る。例えば、パレットベースコーディングにおいて、上記で説明したイントラ予測コーディング技法またはインター予測コーディング技法を行うのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(例えば、所与のブロック)のビデオデータを表す色またはピクセル値のテーブルとして、いわゆるパレットをコーディングし得る。このようにして、ビデオデータの現在のブロックの実際のピクセル値またはそれらの残差をコーディングするのではなく、ビデオコーダは、現在のブロックのピクセル値の1つまたは複数のためのインデックス値をコーディングし得、ここで、インデックス値は、現在のブロックのピクセル値を表すために使用されるパレット中のエントリを示す。
[0083] 例えば、ビデオエンコーダ20は、ブロックのためのパレットを決定することと、ブロックの1つまたは複数の個々のピクセルの値を表す値を有するパレット中のエントリを位置特定することと、ブロックの1つまたは複数の個々のピクセル値を表すために使用されるパレット中のエントリを示すインデックス値でブロックを符号化することとによって、ビデオデータのブロックを符号化し得る。さらに、ビデオエンコーダ20は、符号化ビットストリーム中でインデックス値をシグナリングし得る。次に、ビデオ復号デバイス(例えば、ビデオデコーダ30)は、符号化ビットストリームから、ブロックのためのパレット、並びにパレットを使ってブロックの様々な個々のピクセルを決定するために使用されるインデックス値を取得し得る。ビデオデコーダ30は、ブロックのピクセル値を再構成するために、個々のピクセルのインデックス値をパレットのエントリとマッチングし得る。個々のピクセルに関連付けられたインデックス値が、ブロックのための対応するパレットのどのインデックス値ともマッチングしない事例において、ビデオデコーダ30は、そのようなピクセルを、パレットベースコーディングの目的のために、エスケープピクセルとして識別し得る。
[0084] 別の例において、ビデオエンコーダ20は、以下の動作に従ってビデオデータのブロックを符号化し得る。ビデオエンコーダ20は、ブロックの個々のピクセルについての予測残差値を決定し、ブロックのためのパレットを決定し、個々のピクセルの予測残差値のうちの1つまたは複数の値を表す値を有する、パレット中のエントリ(例えば、インデックス値)を位置特定し得る。さらに、ビデオエンコーダ20は、ブロックの各個々のピクセルについての対応する予測残差値を表すために使用される、パレット中のエントリを示すインデックス値でブロックを符号化し得る。ビデオデコーダ30は、ソースデバイス12によってシグナリングされた符号化ビットストリームから、ブロックのためのパレット、並びにブロックの個々のピクセルに対応する予測残差値のためのインデックス値を取得し得る。説明したように、インデックス値は、現在のブロックに関連付けられたパレット中のエントリに対応し得る。次に、ビデオデコーダ30は、ブロックの予測残差値を再構成するために、予測残差値のインデックス値をパレットのエントリに関連付け得る。予測残差値は、ブロックのピクセル値を再構成するために、(例えば、イントラ予測またはインター予測を使用して取得された)予測値に加算され得る。
[0085] ビデオエンコーダ20は、現在のブロック中で最も支配的なピクセル値を含むパレットを導出し得る。例えば、パレットは、現在のCUについて支配的でありおよび/またはそれを表すと決定または仮定される、いくつかのピクセル値を指し得る。ビデオエンコーダ20は、最初に、パレットのサイズと要素とをビデオデコーダ30に送信し得る。さらに、ビデオエンコーダ20は、ある走査順序に従って、所与のブロック中のピクセル値を符号化し得る。所与のブロック中に含まれる各ピクセルについて、ビデオエンコーダ20は、ピクセル値をパレット中の対応するエントリにマッピングするインデックス値をシグナリングし得る。ピクセル値がパレット中に含まれない(すなわち、パレットコード化ブロックの特定のピクセル値を指定するパレットエントリが存在しない)場合、そのようなピクセルは「エスケープピクセル」として定義される。パレットベースコーディングに従って、ビデオエンコーダ20は、エスケープピクセルのために予約されたインデックス値を符号化し、シグナリングし得る。いくつかの例において、ビデオエンコーダ20はまた、所与のブロック中に含まれるエスケープピクセルについてのピクセル値もしくは残差値(またはそれの量子化バージョン)を符号化し、シグナリングし得る。
[0086] ビデオエンコーダ20によってシグナリングされた符号化ビデオビットストリームを受信すると、ビデオデコーダ30は、最初に、ビデオエンコーダ20から受信された情報に基づいてパレットを決定し得る。ビデオデコーダ30は、次いで、所与のブロックのピクセル値を再構成するために、所与のブロック中のピクセルロケーションに関連付けられる、受信されたインデックス値をパレットのエントリにマッピングし得る。いくつかの事例において、ビデオデコーダ30は、エスケープピクセルのために予約されたインデックス値でピクセルがパレットコード化されていると決定することなどによって、パレットコード化ブロックのピクセルがエスケープピクセルであると決定し得る。ビデオデコーダ30が、パレットコード化ブロック中のエスケープピクセルを識別する事例において、ビデオデコーダ30は、所与のブロック中に含まれるエスケープピクセルについてのピクセル値もしくは残差値(またはそれの量子化バージョン)を受信し得る。ビデオデコーダ30は、個々のピクセル値を対応するパレットエントリにマッピングすることによって、およびパレットコード化ブロック中に含まれるいずれかのエスケープピクセルを再構成するためにピクセル値もしくは残差値(またはそれの量子化バージョン)を使用することによって、パレットコード化ブロックを再構成し得る。
[0087] いくつかの例において、ビデオエンコーダ20は、一緒にコード化される、所与の走査順序のいくつかの連続するピクセルを示す1つまたは複数のシンタックス要素を符号化し得る。例えば、上述したように、ラン値は、一緒にコード化される、パレットコード化ブロック中の特定の走査順序の、連続するサンプル(例えば、サンプルのラン)の数、または連続するインデックス(例えば、インデックスのラン)の数、またはサンプルとインデックスとの任意の組合せを示し得る。いくつかの事例において、ラン値は、同じパレットコーディングモードを使用してコード化されるパレットインデックスのランを示し得る。
[0088] いくつかの例において、ピクセル値は、パレット中のちょうど1つのインデックス値に関連付けられ得る。従って、いくつかの事例において、値のランは、同様の値のピクセル値のストリングをも指し得る。他の例では、以下で不可逆コーディングに関して説明するように、2つ以上のピクセル値が、パレット中の同じインデックス値にマッピングされ得る。そのような例において、値のランは、同様の値のインデックス値を指す。
[0089] 説明のための一例では、所与の走査順序の2つの連続するインデックスが異なる値を有する場合、ランは0に等しい。所与の走査順序の2つの連続するインデックスが同じ値を有するが、その走査順序の3番目のインデックスが異なる値を有する場合、ランは1に等しい。ビデオデコーダ30は、符号化ビットストリームからランを示すシンタックス要素を取得し、そのデータを使用して、同じインデックス値を有する連続するピクセルロケーションの数を決定し得る。
[0090] 追加または代替として、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、マップの1つまたは複数のエントリについてラインコピーを行い得る。エントリはまた、マップのエントリとブロックのピクセル位置との関係により、「位置」と呼ばれることもある。ラインコピーは、いくつかの例において、走査方向に依存し得る。本明細書で説明する「ライン」は、一般に、ブロックの走査順序に応じて、ブロックの行またはブロックの列を指し得る。
[0091] 例えば、ビデオエンコーダ20は、ブロック中の特定の位置のためのピクセル値またはインデックスマップ値が、(水平方向の走査では)その特定の位置の上方のラインにおける、または(垂直方向の走査では)その特定の位置の左側の列における、ピクセルまたはインデックス値に等しいことを示し得る。ビデオエンコーダ20はまた、特定の位置の上方または左側の列の対応するピクセル値またはインデックス、に等しい、走査順序でのピクセル値またはインデックスの数を、ランとして示し得る。この例において、ビデオエンコーダ20および/またはビデオデコーダ30は、規定された近隣するラインから、および現在コード化されているブロックのラインのための規定数のエントリから、ピクセルまたはインデックス値をコピーし得る。
[0092] いくつかの事例において、本開示の態様によれば、値のコピー元のラインは、現在コード化されている位置のラインに直接隣接し得、例えばそのラインの上方または左側にあり得る。他の例では、本開示の態様によれば、ブロックのある数のラインが、ビデオエンコーダ20および/またはビデオデコーダ30によってバッファリングされ得、従って、マップのその数のラインのいずれかが、現在コード化されているマップのラインのための予測値として使用され得る。説明のための一例において、ビデオエンコーダ20および/またはビデオデコーダ30は、ピクセルの現在の行をコーディングする前に、インデックスまたはピクセル値の以前の4つの行を記憶するように構成され得る。この例において、予測行(インデックスまたはピクセル値のコピー元の行)は、切捨単項コードまたは単項コードなどの他のコードによって、ビットストリームにおいて示され得る。切捨単項コードに関して、ビデオエンコーダ20および/またはビデオデコーダ30は、最大行計算(例えば、row_index−1)または最大列計算(例えば、column_index−1)に基づいて、切捨単項コードの最大値を決定し得る。さらに、コピーされる、予測行からの位置の数の指示も、ビットストリーム中に含まれ得る。いくつかの例では、現在の位置の予測元のラインまたは列が別のブロック(例えば、CUまたCTU)に属する場合、そのような予測は無効にされ得る。
[0093] 本開示の技法は、パレットベースビデオコーディングモード、すなわち、上記で導入された前の行からのコピーモードを提供することを意図する。より具体的には、本明細書で説明する技法は、ビデオエンコーダ20およびビデオデコーダ30が、パレットベースビデオコーディングのラン、コピー、およびエスケープモードをサポートすることとともに、前の行からのコピーモードをサポートすることを可能にする。パレットベースコーディングモードの既存のグループに関して、本開示の技法は、前の行からのコピーモードを含む、パレットベースコーディングモードの「拡張」セットを提供し得る。本開示のいくつかの態様は、パレットベースコーディングの前の行からのコピーモードのためのコーディングおよび導出技法を対象とし、他の態様は、前の行からのコピーモードを識別するための情報をサポートするモード識別情報のシグナリングを意図する。
[0094] 本開示の前の行からのコピーモードは、ビデオ符号化デバイス20および/またはビデオ復号デバイス30が、コード化されているピクセル(「現在」のピクセル)の複数の行上方に配置された参照ピクセルを活用するように前の行からのコピーモードを実施し得るという点で、既存のコピーモードとは異なる。さらに、ビデオエンコーダ20および/またはビデオデコーダ30は、現在コード化されているブロック中のピクセルの総数よりも小さい任意の数になるようにマッチングレングス(matching length)を決定し得る。
[0095] 前の行からのコピーモードに従ってパレットコード化ブロックのピクセルを符号化するために、ビデオエンコーダ20は、現在のピクセルの複数の行上方に配置された参照ピクセルからパレットインデックスをコピーし得る。前の行からのコピーモードに従って符号化するいくつかの例において、ビデオエンコーダ20は、参照ピクセルを、現在のピクセルと同じ列中にあり、現在のピクセルの複数の行上方に配置されたものとして識別し得る。言い換えれば、前の行からのコピーモードを使用してピクセルを符号化するために、ビデオエンコーダ20は、現在のピクセルと同じ列中にあり、現在のピクセルの2つ以上の行上方に配置された参照ピクセルのインデックスをコピーし得る。
[0096] さらに、パレットベースコーディングのための前の行からのコピーモードに従って、ビデオエンコーダ20は、行インデックスを符号化し、行インデックスをビットストリーム(例えば、チャネル16を介してシグナリングされる符号化ビデオビットストリーム)中に含め得る。従って、ビデオエンコーダ20は、どの前の行が、前の行からのコピーモードに従って符号化された現在のピクセルのための参照ピクセルを含むのかをビデオデコーダ30に示し得る。いくつかの例において、ビデオエンコーダ20は、参照ピクセルにおいて開始して、ランレングスの指示を符号化し、そのランレングスをビデオデコーダ30にシグナリングし得る。このようにして、ビデオエンコーダ20は、ビデオデコーダ30が、(参照ピクセルにおいて開始する)ラン全体の参照パレットインデックスを(現在のピクセルにおいて開始する)対応するランにコピーすることを可能にし得る。この例の態様について、参照ピクセルランのランと現在のピクセルのランとの間の「マッチングレングス」関して、以下でさらに詳細に説明する。
[0097] 次に、ビデオデコーダ30は、ビデオエンコーダ20によってシグナリングされた行インデックスを使用して前の行からのコピーモードに従って符号化されたピクセルを再構成し得る。例えば、ビデオデコーダ30は、参照ピクセルを含む(例えば、再構成されているピクセルの行の2つ以上の行上方に配置された)行を識別するためにビデオエンコーダ20によってシグナリングされた行インデックスを使用し得る。さらに、ビデオデコーダ30は、現在のピクセルの左から右へのカウント(または列番号)が参照ピクセルの列番号にマッチングすると決定し得る。ビデオデコーダ30は、参照ピクセルを識別するために行インデックスと列番号との交差を位置特定し得る。次に、ビデオデコーダ30は、再構成されている現在のピクセルの色情報を決定するために、識別された参照ピクセルのパレットインデックスをコピーし得る。このようにして、ビデオエンコーダ20およびビデオデコーダ30は、単にブロック中の近隣するラインから近隣するインデックス値をコピーすることに対して、現在のピクセルのパレットインデックスのコピー元の潜在的参照ピクセルのより大きいプールを活用するように本開示の前の行からのコピーモードを実施し得る。
[0098] いくつかの実施形態によれば、ビデオエンコーダ20は、本開示の前の行からのコピーモードに従って、参照ピクセルを識別するために可能な行の数を制約し得る。参照ピクセルを識別するために可能な行の数は、本明細書では「範囲」または「ダイナミックレンジ」と呼ばれる。ビデオエンコーダ20は、現在のピクセルのための参照ピクセルを識別するために前の行のダイナミックレンジを探索し得る。例えば、ビデオエンコーダ20は、現在のピクセルが、変数「T」によって示される行中に配置されていると決定し得る。このシナリオにおいて、現在のピクセルのための許容できる行探索範囲は行0から行T−2にわたり、ここで、Tは2よりも大きいかまたはそれに等しい。この場合に探索されるべき行のダイナミックレンジは[0,T−2]によって示される。説明する例において、行0は、現在のブロック中のピクセルの最初の(または最上の)行を示し、行T−2は、現在符号化されているピクセルを含む行の2つの行上方に配置された行を示す。
[0099] 上記で説明したように、ビデオエンコーダ20は、参照ピクセルを含むパレットコード化ブロックの特定の行を識別するために、(「i」によって示される)行インデックスを符号化し得る。前の行からのコピーモードに従って符号化されたピクセルのための参照ピクセルがダイナミックレンジ[0,T−2]中にあるので、iは、[0,T−2]の範囲中に含んだ整数値を示す。ビデオエンコーダ20は、行インデックスに対応するシンボル値を(T−2−i)として符号化し得る。例えば、ビデオエンコーダ20エンコーダ30は、切捨単項コードワード、固定長コードワード、ゴロムライスコードワード、または指数ゴロムコードワードのいずれかを使用してシンボル値(T−2−i)を符号化し得る。ゴロムライスコードワードの一例において、ビデオエンコーダ20は、3のゴロムライスパラメータ値を使用し得る。ダイナミックレンジを限定することおよび/または特定のコードワードを使用して行インデックスの指示をコーディングすることによって、本開示の技法は、ひずみを実質的に生じることなしにビデオコーディングビットレート効率を改善し得る。
[0100] ビデオデコーダ30は、現在のピクセルを再構成するために逆の動作を行い得る。例えば、ビデオデコーダ30は、上記で説明したように、符号化ビデオビットストリーム中でシンボル値(T−2−i)を受信し、そのシンボル値を使用して、再構成されるべきピクセルのための参照ピクセルを位置特定し得る。次に、ビデオデコーダ30は、参照ピクセルのパレットインデックスを使用して、現在のピクセルをそれで再構成すべきパレットエントリを選択し得る。シンボル値(T−2−i)のための最大可能値はTの値に関係する(例えば、直接比例する)。上記で説明した例において、シンボル値の最大値は、Tが2よりも大きいかまたはそれに等しい場合、T−2である。例えば、Tが2以上の値を有するとすれば、さらに、行インデックス「i」が0のそれの最小可能値を有する場合、すると、(T−2−i)のシンボル値計算はT−2に達する。
[0101] 他の例において、ビデオエンコーダ20は、行のダイナミックレンジ(または「許容探索範囲」)を、[0,T−2]によって表されるより広い範囲のサブセットに制約し得る。例えば、ビデオエンコーダ20は、ダイナミックレンジを行タプル[N1,N2]内に制約し得、ここで、N1およびN2の各々は、パレットコード化ブロック中のピクセルのそれぞれの行を表し、0<=N1<=N2<=T−2。言い換えれば、この例において、N2は(T−2)の値よりも小さいかまたはそれに等しく、N2はN1よりも大きいかまたはそれに等しい。N1は、今度は、この例では0よりも大きいかまたはそれに等しい。この例において、ビデオエンコーダ20は、現在のピクセルから上向きに0番目の行に横断する許容探索行が、行N2から行(N1+1)に進むようにダイナミックレンジを制約する。一例において、許容行範囲は行タプル[N1,N2]にわたり、ここで、N1は0に等しく、N2は0より大きく、(T−2)はN2よりも大きい(N1=0およびN1<N2<T−2として表される)。
[0102] 本開示の態様による様々な例において、ビデオエンコーダ20は、許容探索行のダイナミックレンジをビデオデコーダ30にシグナリングし得る。上記で説明した行タプル[N1,N2]の例において、ビデオエンコーダ20は、ビデオデータの様々なレベルで行N2から行(N1+1)にわたるダイナミックレンジをシグナリングし得る。いくつかの非限定的な例として、ビデオエンコーダ20は、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、スライスパラメータセットのうちの1つもしくは複数中で、またはコーディングユニット(CU)中でダイナミックレンジ情報をシグナリングし得る。iが[N1,N2]のダイナミックレンジ内の整数値を表す場合、行インデックスiは、対応するシンボル値(N2−i)を有する。ビデオエンコーダ20は、固定長コードワード(fixed length codeword)、切捨単項コードワード(truncated unary codeword)、切捨バイナリコードワード(truncated binary codeword)、ゴロムライスコードワード(Golomb-Rice codeword)、または指数ゴロムコードワード(exponential Golomb codeword)のいずれかを使用してシンボル値(N2−1)を送信し得る。
[0103] 以下の表1は、N1=0およびN2=6のシナリオにおいて[N1,N2]のダイナミックレンジ内の行インデックスを符号化するためにビデオエンコーダ20が使用し得る切捨単項コードワードの例を示す。いくつかの例において、参照行が現在の行(例えば、符号化されているピクセルを含む行)に比較的より近い場合、ビデオエンコーダ20は、参照行インデックスを符号化するために比較的より短いコードワードを使用し得る。
[0104] 代替的に、ビデオエンコーダ20は、行インデックスiの値を示す情報をシグナリングするために切捨バイナリコードを使用し得る。切捨バイナリコードは、有限のアルファベットをもつ均一な確率分布のためにしばしば使用され、「n」によって示される数の全サイズとともにアルファベットによってパラメータ化される。切捨バイナリコードは、nの値が2のべき乗でない場合、バイナリ符号化の一般化された形式として記述され得る。nが実際に2のべき乗である場合、0≦x<nのコード化値は、長さlog2(n)のxのための単純なバイナリコードである。そうでない場合、2k≦n<(2k+1)およびu=2k+(1−n)であるように、k=floor(log2(n))であり、ここで、uはnの値よりも小さい値を表す。
[0105] 切捨バイナリコードに従って、ビデオエンコーダ20またはビデオデコーダ30などのコーディングデバイスは、最初のu個のシンボルに長さkのコードワードを割り当て、次いで、残りの(n−u)個のシンボルに長さ(k+1)の最後の(n−u)個のコードワードを割り当てる。以下の表2は、ビデオエンコーダ20が使用し得る切捨バイナリコードワードを示し、i、n=5の一例。
[0106] 本開示の態様によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、行インデックス情報の冗長性を検出し、緩和(または潜在的に除去)し得る。例えば、参照行インデックスを符号化する際に、ビデオエンコーダ20は、前の行からのコピーモードを使用して符号化された前のピクセルと比較して何らかの冗長な参照行インデックス情報を検出し得る。一例において、ビデオエンコーダ20は、前のピクセルを、水平ラスタ走査順序で現在のピクセルの直前にくるピクセルとして識別し得る。ビデオエンコーダ20が、識別された前のピクセルが本開示の前の行からのコピーモードに従って符号化されたと決定した場合、ビデオエンコーダ20は、現在のピクセルについての参照行インデックス情報が、前のピクセルについての参照行インデックス情報に対して冗長であるかどうかを決定し得る。
[0107] 以下では、前のピクセルが、前の行からのコピーモードを使用して符号化され、対応する参照行インデックスのための(N2,prev−iprev)のコード化シンボルを有する例について説明する。この例において、ビデオエンコーダ20は、現在のピクセルが、前の行からのコピーモードに従って符号化された場合、それの参照行インデックスのために同じコード化シンボルを有することができないと決定し得る。言い換えれば、ビデオエンコーダ20は、現在のピクセルも前の行からのコピーモードに従って符号化されるとすれば、現在のピクセルのための参照行インデックスコード化シンボル(N2,cur−icur)が、前のピクセルのための参照行インデックス(N2,prev−iprev)とは異なると決定し得る。
[0108] 変数「iprev」および「icur」は、上記で説明した例において、現在のブロック中の実際の参照行インデックス値を表す。このようにして、ビデオエンコーダ20は、前の行からのコピーモードを使用して現在のピクセルと前のピクセルの両方が符号化される場合、現在のブロックの参照行インデックスコーディング中に1つの可能な行インデックスを除外し得る。より具体的には、現在のピクセルのための参照行インデックスを符号化する際に、ビデオエンコーダ20は、前のピクセルに割り当てられた参照行インデックス、すなわち、シンボル値(N2,prev−iprev)によって記述される参照行インデックスを除外し得る。前の行からのコピーモードに従って現在のピクセルのための参照行インデックスをビデオエンコーダ20がそれによって符号化し得る技法の特定の実施形態について以下で説明する。
[0109] 本明細書で説明する冗長性低減技法のいくつかの実施形態によれば、ビデオエンコーダ20は、現在のピクセルと前の(水平ラスタ走査順序で直前の)ピクセルの両方が前の行からのコピーモードで符号化される場合、現在のピクセルのための参照行インデックスをコーディングするために以下の手順を行い得る。
[0110] ビデオエンコーダ20は、前のピクセルのためのコード化参照行シンボルを示すためにRefCodedRowIdx=(N2,prev−iprev)を符号化し得、現在のピクセルのための利用可能な参照行の数を示すためにTotalRowNum=(N2,cur−N1,cur+1)を符号化し得る。さらに、ビデオエンコーダ20は、以下のコードに従って、CurCodedRowIdxとして示される、現在のピクセルのためのコード化行インデックスシンボルを導出し得る。
ここで、EntropyCodingFunction(CurCodedRowIdx,TotalRowNum)は、例えば、切捨バイナリ、または切捨単項、または固定長、または指数ゴロムを利用するエントロピーコーディング方法である。
[0111] ビデオデコーダ30も本開示の冗長性低減技法を実施し得る。例えば、ビデオデコーダ30が、再構成されるべき現在のピクセル、並びに前の(一例として、水平ラスタ走査順序で直前の)ピクセルの両方が前の行からのコピーモードに従って符号化されると決定した場合、ビデオデコーダ30は、以下で説明する非限定的で例示的な実施形態に従って現在のピクセルの参照行インデックスを復号し得る。
[0112] ビデオデコーダ30は、RefCodedRowIdx、前のピクセルのための既に復号された参照行シンボルを符号化し得、現在のピクセルのための可能な利用可能な参照行の数としてTotalRowNum=(N2,cur−N1,cur+1)を符号化し得る。さらに、ビデオデコーダ30は、CurCodedRowIdxとして示される、現在のピクセルのための行インデックスシンボルを導出し得、以下のコードに従って導出される。
ここで、EntropyDecodingFunction(CurCodedRowIdx,TotalRowNum)は、シンボルを復号するために切捨バイナリ、または切捨単項、または固定長、または指数ゴロムを利用するエントロピー復号方法である。参照行インデックスは、値icur=N2,cur−CurCodedRowIdxを使用して取得される。
[0113] ビデオエンコーダ20は、前の行からのコピーモードを使用して符号化されたパレットコード化ブロックのためのマッチングレングスを符号化し得る。いくつかの例において、ビデオエンコーダ20は、ビットストリーム中でマッチングレングスをシグナリングし得、それにより、ビデオデコーダ30は、パレットコード化ブロックのためのマッチングレングスを取得することが可能になる。本明細書で使用する、パレットコード化ブロックのマッチングレングスは、ピクセル差分に関して、まだコード化されていない連続するピクセルにマッチングする連続する参照ピクセル(以前コード化された領域中の)の数を指す。一例において、以前コード化された領域は、参照ピクセルのための以下の一連の値を含み得る:[23,25,68,233]。この例において、まだ符号化されていないピクセルの領域は、「現在」のピクセルのための以下の一連の値を含む:[11,23,25,68,233,15]。
[0114] 示されているように、現在のピクセルシリーズの4つの連続するピクセルは、一連の以前コード化された参照ピクセルに(値および順序において)マッチングする。従って、ビデオエンコーダ20は、現在のパレットコード化ブロックのマッチングレングスが4に等しいと決定し得る。一般に、ブロックのマッチングレングスは、異なる一連の参照マッチングピクセルが現在のストリングと重複し得るので、現在のブロック中のピクセルの数よりも小さい任意の値であり得る。
[0115] 「前の行からのコピー」の一例が、以下でさらに詳細に説明する図5に示されている。本開示の前の行からのコピーモードに従って、ビデオエンコーダ20は、現在のピクセルの「まっすぐ上方に」または直接上方に配置された参照ピクセルを使用してマッチング基準を決定し得る。言い換えれば、ビデオエンコーダ20は、参照ピクセルが現在のブロック中で現在のピクセルと同じ水平位置を有するような参照ピクセルを識別し得る。従って、この例によれば、参照ピクセルは現在のピクセルとは異なる(例えば、2つ以上だけ先行する)行中に配置されるが、参照ピクセルは、必ず現在のピクセルと同じ列中に配置される。
[0116] ピクセルの現在のストリング(または「ラン」)が、前の行からのコピーモードを使用して、さらにマッチングレングス情報のエントロピー符号化中に符号化される場合、ビデオエンコーダ20は、ランが0よりも大きいか、または1よりも大きいか、または2よりも大きい場合、ランを符号化するために3つの追加のコンテキストを使用し得る。現在のストリングが「前の行からのコピー」を使用するとき、上記に記載した3つの値シナリオはそれぞれシンボル(Gr0)、(Gr1)、および(Gr2)によって示される。
[0117] ビデオ符号化デバイス20は、パレットコード化ブロックのマッチングレングスの値が制約される(または「制約」を有する)と決定し得る。例えば、ビデオエンコーダ20は、(「MatchingLen」という用語によって示される)マッチングレングスの値が、ある最小値(例えば、「T」によって示される値)を有すると決定し得る。この場合、パレットコード化ブロックのマッチングレングスに関する制約は、数学的にMatchingLen>=Tとして表される。
[0118] 本明細書で説明する技法のいくつかの実施形態によれば、ビデオエンコーダ20は、既存のパレットベースコーディング技法の場合のように(MatchingLen−1)の値の代わりに、(MatchingLen−T)の値を示す情報を符号化し、シグナリングし得る。従って、本明細書で説明する技法のこれらの態様によれば、ビデオエンコーダ20は、ブロックの実際のマッチングレングスと、マッチングレングスの値に関する検出された制約との間の差分または「Δ」を符号化し、シグナリングし得る。このように(MatchingLen−T)の値を符号化し、シグナリングすることによって、ビデオエンコーダ20は、ビデオデコーダ30にマッチングレングス情報を提供する際のビットレート要件および帯域幅消費を潜在的に節約し得る。
[0119] 潜在的なビットレートおよび帯域幅節約の非限定的な例について本明細書で説明する。制約Tの値が3である場合、ビデオエンコーダ20は、(MatchingLen−3)の値を符号化し、ビデオデコーダ30にシグナリングし得る。この例において、MatchingLen変数の生の値に応じて、3だけの低減は、ビデオエンコーダ20が、既存のパレットベースコーディング技法の場合にあり得るように(MatchingLen−1)の値を符号化するよりも少ないビットを使用することを潜在的に可能にし得る。
[0120] 次に、ビデオデコーダ30は、現在のパレットコード化ブロックのマッチングレングスを取得するために、受信された(MatchingLen−T)値を復号し得る。より具体的には、ビデオデコーダ30は、(MatchingLen−T)の受信された値を復号し、受信された値を制約Tだけ増分するために既存の技法を実施し得る。MatchingLenの値を取得するためにビデオデコーダ30が適用し得る例示的な手順が以下のコードに記述されている。
[0121] 以下でより詳細に説明するように、図5は、行0を基準としてもつ、前の行からのコピーの一例を示している。
[0122] 本開示のいくつかの態様によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、パレットインデックスのランレングスコーディングのための効率を高めるために本開示の1つまたは複数の技法を実施し得る。いくつかの例において、ビデオエンコーダ20および/またはビデオデコーダ30は、ランレングスをコーディングするときにランレングス制約を課すために本開示のいくつかの技法を実施し得る。ビデオエンコーダ20および/またはビデオデコーダ30は、特定のパレットモードと併せてランレングス制約を適用し得る。例えば、ビデオエンコーダ20またはビデオデコーダ30は、ランレングスしきい値に基づいてパレットベースビデオコーディングのための特定のパレットモードを有効化し得、ここで、ランレングスしきい値は、パレットモードとともにグループとして処理されているブロックのピクセルの数に関連付けられる。説明のための一例において、ビデオエンコーダ20および/またはビデオデコーダ30は、ランレングスがしきい値を満たす(例えば、しきい値よりも大きいかまたはそれに等しい)場合、本開示の前の行からのコピーモードを有効化し得る。
[0123] いくつかの例において、本開示のパレットベースコーディングのための前の行からのコピーモードに従ってビデオデータのブロックを符号化する際に、ビデオエンコーダ20は、ランレングスが、対応するしきい値を満たすかまたは超えるように、参照ランと現在コード化されているランとのランレングス(または「マッチングランレングス」)に関して制約を課し得る。さらに、ビデオエンコーダ20は、マッチングランレングスがしきい値に等しいかまたはそれよりも大きいとき、前の行からのコピーモードを有効化し得る。様々な実施形態によれば、しきい値は、あらかじめ定義された定数、または(例えば、ケースバイケースで導出される)適応数であり得る。例えば、ビデオエンコーダ20は、参照行オフセット、パレットサイズ、または現在のランの開始ピクセルのパレットインデックスのうちの1つまたは複数を含む、ファクタの様々な組合せに基づいて適応しきい値を導出し得る。
[0124] 以下でさらに詳細に説明するように、本開示によるいくつかのシナリオにおいて、ビデオエンコーダ20およびビデオデコーダ30は両方とも、無関係にしきい値を取得するように構成され得、それにより、ビデオエンコーダ20がしきい値をビデオデコーダ30にシグナリングする必要がなくなる。また、以下でさらに詳細に説明するように、本開示によるいくつかの例において、ビデオエンコーダ20はしきい値をビデオデコーダ30にシグナリングし得、それにより、ビデオデコーダ30は、しきい値をパラメータまたはオペランドとして使用してマッチングランレングスを導出することが可能になる。ビデオエンコーダ20がしきい値をシグナリングする例において、ビデオエンコーダ20は、シーケンスパラメータセット(SPS)ヘッダ中でまたはピクチャパラメータセット(PPS)ヘッダ中でなど、パラメータセットのヘッダ中でなど、様々なレベルにおいてしきい値をシグナリングし得る。いくつかの例において、ビデオエンコーダ20は、LCUレベルにおいてまたはCUレベルにおいてなど、ビットストリーム中で明示的にしきい値をシグナリングし得る。
[0125] ビデオエンコーダ20は、符号化ビデオビットストリーム中で実際のランレングスとしきい値との間の差分をシグナリングし得る。例えば、ビデオエンコーダ20は、差分(本明細書ではシンボル「K」によって示される)をシグナリングし得る。より具体的には、差分は式K=(N−T)によって表され得、ここで、Nは実際のマッチングランレングスを示し、およびここで、Tは最小ランしきい値を示す。
[0126] 対応して、ビデオデコーダ30は、Kによって示されるシグナリングされた差分を使用して実際のランレングスNを導出し得る。ビデオデコーダ30は、前の行からのコピーモードに従って符号化された、パレットコード化ブロックの部分のための実際のマッチングランレングスを取得するために、Kの受信された値にしきい値を加算し得る。より具体的には、ビデオデコーダ30は、以下の数学演算を行うことによって実際のマッチングランレングスNを取得し得:K+T、ここで、Kの値は符号化ビデオビットストリーム中で受信された。上記で説明したように、Kは数式(N−T)を表す。従って、KにTの値を加算することによって、ビデオデコーダ30は、数学演算(N−T+T)を効果的に行い、それによりNの値が生じる。上記で説明したように、Nは、ラン中の要素の実際の数(すなわち、ランレングス)を表す。
[0127] このようにして、ビデオエンコーダ20およびビデオデコーダ30は、本開示の態様に従って、ビットレート要件を低減するように構成され得る。例えば、差分値(上記の式中のK)をシグナリングすることによって、ビデオエンコーダ20は、マッチングランレングス(上記の式中のN)よりも小さい値をシグナリングし、潜在的に符号化ビデオビットストリーム中でより少数のビットを消費し得る。特に、前の行からのコピーモードに従ってコード化されるランの様々な事例においてあり得るように、マッチングランレングスが比較的大きい値である事例において、ビデオエンコーダ20はビットレート要件を緩和し得る。対応して、ビデオデコーダ30も、最小しきい値(上記の式中のT)を活用することによって、マッチングランレングス(上記の式中のN)を導出するために、より少数のシグナリングされたビットを必要とし得る。従って、ビデオエンコーダ20およびビデオデコーダ30は、コーディング精度を維持しながらビットレートを節約するために、本明細書で説明するしきい値ベースの制約を使用し得る。
[0128] 上記で説明したように、本開示の態様による様々なシナリオにおいて、最小ランしきい値Tは定数であり得る。そのようなシナリオにおいて、ビデオエンコーダ20とビデオデコーダ30の両方は、前の行からのコピーモードによるパレットベースコーディングのための最小ラン制約に準拠するように構成され得る。今度は、ビデオエンコーダ20とビデオデコーダ30の両方が一定のしきい値に準拠して前の行からのコピーモードを実施するように構成されるので、しきい値ベースの制約は、ビデオエンコーダ20がしきい値をビデオデコーダ30にシグナリングする必要をなくし得る。具体的には、ビデオデコーダ30が、現在のピクセルのためのパレットベースコーディングモードが前の行からのコピーモードであると決定した場合、ビデオデコーダ30は、Kの受信された差分値を使用して実際のランレングスを決定し得る。一例において、ビデオデコーダ30は、しきい値Tを3になるように決定し得る(例えば、T=3)。ビデオエンコーダ20から受信されたKの値を使用して、ビデオデコーダ30は、マッチングランレングスNを取得するために、Kの受信された値に3の値を加算し得る。この特定の例において、ビデオデコーダ30は、演算(N−3+3)を行うことによってNの値を取得し得る。
[0129] 本開示の態様による他のシナリオによれば、ビデオエンコーダ20およびビデオデコーダ30は、2つのファクタ上で使用して最小ランしきい値Tを適応的に導出し得る。これらのシナリオにおいて、2つのファクタは、参照行オフセット(例えば、現在コード化されている行と、インデックスのコピー元の参照行との間の行の数)と、現在のランの開始ピクセルのためのパレットインデックスとである。例えば、参照行オフセットを符号化するために、ビデオエンコーダ20は、切捨バイナリコードのバイナリ化において「A」によって示されるビット数を必要とし得る。さらに、ランの開始ピクセルのパレットインデックスを符号化するために、ビデオエンコーダ20は、切捨バイナリコードのバイナリ化において「N」によって示されるビット数を必要とし得る。これらの例において、ビデオエンコーダ20とビデオデコーダ30の両方は、以下の式に従って最小ランしきい値Tを導出し得る。
ビデオエンコーダ20とビデオデコーダ30の両方はTを導出するために(上記に示された)同じ関数を適用するように構成されるので、ビデオエンコーダ20は、ビットストリームを介してTの値をビデオデコーダ30に明示的にシグナリングすることが不要であり得る。
[0130] 本開示の態様によるさらに他の例によれば、ビデオエンコーダ20およびビデオデコーダ30は、参照行オフセットの値と、現在のラン(または現在の「ストリング」)の開始ピクセルのためのパレットインデックスとを仮定すれば、ルックアップテーブルから最小ランしきい値Tを取得し得る。他の例において、ビデオエンコーダ20およびビデオデコーダ30は、参照行オフセットのバイナリ化ビットと、現在のランのための開始ピクセルのパレットインデックスとを仮定すれば、ルックアップテーブルから最小ランしきい値Tを取得し得る。一例として、しきい値を導出するために以下のルックアップテーブルRunConstraint[9][6]が使用され得、ここで、RunConstraint[][]中の第1のインデックスは、参照行オフセットを符号化するために使用されるビット数を表し、およびここで、第2のインデックスは、パレットインデックスを符号化するために使用されるビット数を表す。上記のルックアップテーブルの例示的な導出は次のように表され得る。
ルックアップテーブルベースの導出の例において、ビデオエンコーダ20とビデオデコーダ30の両方は、無関係にしきい値Tを導出し得る。従って、本開示のルックアップテーブルベースのしきい値導出技法は、ビデオエンコーダ20がしきい値をビデオデコーダ30にシグナリングする必要をなくし得る。
[0131] 本開示の態様による他の例において、ビデオエンコーダ20は、本開示の前の行からのコピーモードに従って符号化されたパレットコード化ブロックのための最小しきい値ランレングスTを符号化し、明示的にシグナリングし得る。いくつかのそのような例において、ビデオエンコーダ20は、ブロックのために使用されるパレットコーディングモードにかかわらず、パレットコード化ブロックのためのTの値を符号化し、明示的にシグナリングし得る。次に、ビデオデコーダ30は、符号化ビデオビットストリーム中で差分値K並びに最小ランレングスしきい値Tを受信し得る。ビデオデコーダ30は、KとTとの受信された値を加算することによって現在のラン(または現在の「ストリング」)のためのランレングスNを導出するためにKとTとの受信された値を使用し得る。様々な例において、ビデオエンコーダ20は、切捨単項コード、指数ゴロムコードを使用して、またはランコーディングのための様々なコーディング技法を使用して、パレットコード化ブロックのための最小ランレングスしきい値Tを符号化し得る。
[0132] ビデオエンコーダ20がしきい値Tをシグナリングする例において、ビデオエンコーダ20は、シーケンスパラメータセット(SPS)ヘッダ中でまたはピクチャパラメータセット(PPS)ヘッダ中でなど、パラメータセットのヘッダ中でなど、様々なレベルにおいてしきい値をシグナリングし得る。いくつかの例において、ビデオエンコーダ20は、LCUレベルにおいてまたはCUレベルにおいてなど、ビットストリーム中で明示的にしきい値をシグナリングし得る。ビデオエンコーダ20がTの値をビデオデコーダ30にシグナリングする場合、本開示の技法は、KとTとの値が、Nの値をシグナリングするために必要とされるであろうよりも少数のビットを必要とし得るという点で、ビットレート要件の低減を潜在的に提供する。上記で説明したように、Nの値は、様々なシナリオにおいて、相応して大きいビット数をシグナリングする必要がある比較的大きい数であり得る。
[0133] いくつかの例において、ビデオエンコーダ20およびビデオデコーダ30は、前の行からのコピーモードを別個のランモードとして扱い得る。いくつかの例において、本開示の態様によれば、ビデオエンコーダ20およびビデオデコーダ30は、前の行からのコピーモードを上方コピーモードとマージし得る。例えば、シンタックス要素palette_modeフラグをシグナリングするとき、ビデオエンコーダは、以下の組合せの間で区別するためにただ1つのビンを使用し得る:(上方コピー、前方コピー)または(左コピー、エスケープ)。例えば、ビデオエンコーダ20は、上方コピーモードまたは前の行コピーモードを示すために1のpalette_modeフラグ値を使用し得、左コピーモードまたはエスケープモードを示すために0のpalette_modeフラグ値を使用し得る。これらの例では、ビデオエンコーダ20がpalette_modeフラグを1の値に設定した場合、ビデオエンコーダ20は、現在のピクセルのためのパレットインデックスのコピー元である参照行を示すために、「yOffset」によって表されるシンタックス要素をシグナリングし得る。ビデオエンコーダ20は、上方コピーモードと前の行からのコピーモードとに関してyOffsetの特殊コードワードを符号化するために本開示の技法を実施し得る。例えば、ビデオエンコーダ20は、次のようにyOffsetコードワードのための可変長コード(VLC:variable-length code)を取得し得る。
0−上方コピーモード
1+yOffsetの切捨バイナリコード−前の行コピーモード
[0134] 本開示の態様はまた、ピクセルのためのパレットコーディングモードを識別する情報の符号化、シグナリング、および復号を対象とし、ここで、可能なパレットベースコーディングモードのプールは、上記で説明した前の行からのコピーモードを含む。様々な例において、ビデオエンコーダ20は、切捨単項コードを使用してモード識別情報を符号化し、適用可能なモードのための切捨単項コードをビデオデコーダ30にシグナリングし得る。次に、ビデオデコーダ30は、パレットコード化ブロックの対応するピクセルに適用可能なパレットベースコーディングモードを決定するために、モード識別切捨単項コードを復号するように構成され得る。
[0135] いくつかの事例において、ビデオエンコーダ20および/またはビデオデコーダ30は、可能なモードのための切捨単項コードを決定する際に最大シンボル値を使用し得る。一実施形態によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、2に等しい最大シンボル値で、全ての事例において、モードをコーディングし得る。シングルビットを使用して表される値に切捨単項コードを制約し得る、既存のパレットベースコーディング技術とは対照的に、この実施形態のモード識別技法は、ビデオエンコーダ20およびビデオデコーダ30が、シングルビットを使用して表され得る値で、または表されるために2ビットを必要とする値でパレットベースコーディングモードを識別することを可能にする。
[0136] 1つのそのような実施形態によれば、ビデオエンコーダ20およびビデオデコーダ30は、インデックスコーディングを使用するエスケープピクセルのコーディングを含む、ランモードの使用を表すために単一の切捨単項コードワードを使用し得る。より具体的には、この例において、単一の切捨単項コードワードは、ピクセルのためのランモードの使用、並びにエスケープピクセルのための「予約済み」パレットインデックスの使用を表し得る。例えば、ビデオエンコーダ20およびビデオデコーダ30は、ピクセルのためのランモードの使用またはエスケープピクセルのための予約済みパレットインデックスの使用を示すために(切捨単項コードワード0によって表される)シンボル0を使用し得る。この例において、ビデオエンコーダ20およびビデオデコーダ30は、パレットコード化ブロック中のピクセルのためのコピーモードの使用を示すために(切捨単項コードワード10によって表される)シンボル1を使用し得る。さらに、この例によれば、ビデオエンコーダ20およびビデオデコーダ30は、パレットコード化ブロック中のピクセルのための前の行からのコピーモードの使用を示すために(切捨単項コードワード11によって表される)シンボルを使用し得る。以下の表3は、上記で説明した実施形態による、対応する切捨単項コードワードへのシンボルのマッピングを示す。
[0137] パレットベースコーディング技法のいくつかの例によれば、ビデオエンコーダ20は、パレットコード化ブロック中のピクセルがエスケープピクセルであることを示すようにフラグを設定し得る。いくつかのそのような例において、ビデオエンコーダ20は、エスケープピクセルの色情報を符号化し、符号化された色情報をビデオデコーダ30にシグナリングし得る。次に、ビデオデコーダ30は、パレットコード化ブロック中のピクセルをエスケープピクセルとして識別するためにビットストリーム中の有効化フラグを復号し得る。さらに、ビデオデコーダ30は、エスケープピクセルを再構成するために、シグナリングされた色情報を使用し得る。
[0138] 1つのそのような実施形態によれば、ビデオエンコーダ20およびビデオデコーダ30は、パレットコード化ピクセルのためのランモードの使用を表すために単一の切捨単項コードワードを使用し得る。例えば、ビデオエンコーダ20およびビデオデコーダ30は、ピクセルのためのランモードの使用またはエスケープピクセルのための予約済みパレットインデックスの使用を示すために(切捨単項コードワード0によって表される)シンボル0を使用し得る。この例において、ビデオエンコーダ20およびビデオデコーダ30は、パレットコード化ブロック中のピクセルのためのコピーモードの使用を示すために(切捨単項コードワード10によって表される)シンボル1を使用し得る。さらに、この例によれば、ビデオエンコーダ20およびビデオデコーダ30は、パレットコード化ブロック中のピクセルのための前の行からのコピーモードの使用を示すために(切捨単項コードワード11によって表される)シンボルを使用し得る。以下の表4は、上記で説明した実施形態による、対応する切捨単項コードワードへのシンボルのマッピングを示す。
[0139] 本明細書で説明する技法のいくつかの例示的な実施形態において、ビデオエンコーダ20およびビデオデコーダ30は、異なるシナリオでは別様に最大シンボル値を設定し得る。例えば、ビデオエンコーダ20およびビデオデコーダ30は、現在のピクセルをコーディングするために利用可能である可能なモードの数を低減するために、パレットコード化ブロック中の現在のピクセルの位置を示す情報と、現在のピクセルの近隣ピクセルがコード化されるモードを示す情報とを活用し得る。可能なモードの数を低減することによって、ビデオエンコーダ20およびビデオデコーダ30は、既存のパレットベースコーディング技術から生じる冗長性問題に対処するか、それを緩和するか、または潜在的になくすために本開示の技法を実施し得る。
[0140] パレットベースコーディングに関連するいくつかの冗長性問題に対処するために、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のピクセルが、パレットコード化ブロックの第1の行中に配置されると決定するか、または現在のピクセルの左側近隣ピクセルがコピーモードを使用してコード化されると決定する。そのような例において、ビデオエンコーダ20および/またはビデオデコーダ30は、最大シンボル値が2ではなく1になるように、モード識別シンボル値の低減されたセットを使用し得る。ビデオエンコーダ20および/またはビデオデコーダ30は、前の行からのコピーモードが、パレットコード化ブロック中の第3の行から開始する使用のために利用可能であると決定し得る。従って、現在のピクセルが、パレットコード化ブロックの第1または第2の行中にある場合、ビデオエンコーダ20およびビデオデコーダ30は、現在のピクセルのための可能なモードとして前の行からのコピーモードを排除し得る。ビデオエンコーダ20およびビデオデコーダ30は、それにより、ピクセルのための可能なパレットベースコーディングモードのプールをランモードおよびコピーモード、すなわち合計2つの可能なモードのみに低減し得る。従って、ビデオエンコーダ20およびビデオデコーダ30は、最大シンボル値を1だけ低減して1の値にし得る。
[0141] パレットベースコーディングモードを識別するための最大シンボル値が0である場合、ビデオエンコーダ20は、シンボル値を明示的に送信する代わりに、モード情報を推論し得る。同様に、ビデオデコーダ30は、最大シンボル値が0である事例ではモード情報を推論し得る。以下の擬似コードは、ビデオエンコーダ20がモード識別シンボルを生成する際に実施し得る冗長性除去技法の一例を表す。
[0142] 本明細書で説明する技法のいくつかの実施形態によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、切捨単項コードを符号化するためのコンテキストが、以前コード化された近隣ピクセルのモードに依存するように、そのコンテキストを導出し得る。具体的には、ビデオエンコーダ20および/またはビデオデコーダ30は、モード識別シンボルを符号化するためにいくつかのコンテキストを使用し得る。ビデオエンコーダ20およびビデオデコーダ30は、以前コード化された左側近隣ピクセルのために使用されるパレットコーディングモードに応じて、または以前コード化された上方近隣ピクセルのために使用されるパレットコーディングモードに応じてコンテキストをコーディングし得る。左側近隣ピクセルと上方近隣ピクセルとの各々について、可能なコーディングモードは、ランモードと、コピーモードと、前の行からのコピーモードとを含む。
[0143] 一例において、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のピクセルのための切捨単項コードワードの第1のビンをコーディングするために、左側近隣ピクセルまたは上方近隣ピクセルのいずれかのコンテキストを使用し得る。代替的に、別の例において、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のピクセルのための切捨単項コードワードのビンの全てをコーディングするために、左側近隣ピクセルまたは上方近隣ピクセルのいずれかのコンテキストを使用し得る。代替的にさらに、別の例において、ビデオエンコーダ20および/またはビデオデコーダ30は、現在のピクセルのためのモードを示すために、切捨単項コードワードの第1のビンをコーディングするために、左側近隣ピクセルまたは上方近隣ピクセルのうちの一方のコンテキストを使用し、残りのビンをコーディングするために、左側近隣ピクセルまたは上方近隣ピクセルのうちの他方のコンテキストを使用し得る。
[0144] 本明細書で説明する技法のいくつかの実施形態によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、利用可能なコンテキストのいくつかが、以前コード化された近隣ピクセルについてのモード情報に依存し、コンテキストの他のものが、以前コード化された近隣ピクセルのいずれについてのモード情報にも依存しないと決定し得る。特定の例では、ビデオエンコーダ20および/またはビデオデコーダ30が、以前コード化された(例えば上方または左側)近隣ピクセルに応じて第1のビンをコーディングし得る、2つの可能なコンテキストがある。より具体的には、ビデオエンコーダ20および/またはビデオデコーダ30は、それぞれの近隣ピクセルのために使用されるパレットベースコーディングモード(例えば、ランモード、コピーモード、または前の行からのコピーモードのうちの1つ)に基づいて、それらの2つの利用可能なコンテキストからコンテキストを選択し得る。
[0145] いくつかの例において、ビデオエンコーダ20および/またはビデオデコーダ30は、以前コード化された近隣ピクセルのために使用されたコーディングモードに基づいて、動的に切捨単項コードワードの第1のビンのコンテキストを決定し得る。例えば、以前コード化された近隣ピクセルはランモードを使用してコード化され、ビデオエンコーダ20および/またはビデオデコーダ30は、本明細書で「コンテキストA」と呼ばれる単一のCABACコンテキストを使用して第1のビンをコーディングし得る。一方、以前コード化された近隣ピクセルが、本開示のコピーモードまたは前の行からのコピーモードのいずれかを使用してコード化された場合、ビデオエンコーダ20および/またはビデオデコーダ30は、本明細書で「コンテキストB」と呼ばれる別のCABACコンテキストを使用して第1のビンをコーディングし得る。
[0146] 第2のビンをコーディングするために、(適用可能な場合、切捨単項コードワードに関して)ビデオエンコーダ20および/またはビデオデコーダ30は、以前コード化された近隣ピクセル(すなわち、上方ネイバーおよび左ネイバー)のいずれかのために使用されるパレットベースコーディングモードに依存しないコンテキストを使用し得る。従って、ビデオエンコーダ20および/またはビデオデコーダ30は、以前コード化された近隣ピクセルのいずれかに関係するモード識別情報とは無関係に切捨単項コードワードの第2のビンをコーディングし得る。例えば、第2のビンは、以前コード化された近隣ピクセルのいずれかに関係する変化するモード情報に鑑みて不変のままであり得る。ビデオエンコーダ20および/またはビデオデコーダ30が切捨単項コードワードの第2のビンをコーディングするために使用し得るCABACコンテキストは、本明細書では「コンテキストC」と呼ばれる。上記で説明したように、ビデオエンコーダ20および/またはビデオデコーダ30は、コード化されている現在のピクセルより以前コード化された近隣ピクセルのために使用されるパレットベースコーディングモードにかかわらず、切捨単項コードワードの第2のビンをコーディングするためにコンテキストCを使用し得る。
[0147] いくつかの実施形態によれば、ビデオエンコーダ20および/またはビデオデコーダ30は、モード情報冗長性に対処するためにシンボル(例えば切捨単項コードワード)が修正される事例において、上記で説明したコンテキスト割当て方式を組み合わせ得る。例えば、ビデオエンコーダ20および/またはビデオデコーダ30は、パレットのサイズがしきい値を満たすかまたは超える場合のみ、パレットベースコーディングの前の行からのコピーモードを有効化し得る。ビデオエンコーダ20およびビデオデコーダ30は、前の行からのコピーモードをそれにおいてアクティブにすべきしきい値パレットサイズを示すためにQC_COPY_PREV_ROW_PLT_SIZEシンボルを使用し得る。いくつかの事例において、QC_COPY_PREV_ROW_PLT_SIZEは2のパレットサイズに対応し得る。
[0148] さらに、ビデオエンコーダ20およびビデオデコーダ30は、現在のパレットコード化ブロック中のピクセルの第3の行において開始して、第3の行の下方にある後続の行に進む、前の行からのコピーモードを有効化し得る。より具体的には、前の行からのコピーモードは、現在のピクセルの複数(すなわち、少なくとも2つ)の行上方に配置された参照ピクセルからインデックスをコピーすることを伴う。従って、ビデオエンコーダ20およびビデオデコーダ30は、2つの最上行の複数の行上方にはピクセルがおそらく配置され得ないことにより、ブロックの2つの最上行中に配置されたピクセルに関して可能なパレットベースコーディングモードとして前の行からのコピーモードを排除し得る。さらに、いくつかの事例において、ビデオエンコーダ20およびビデオデコーダ30は、左側近隣ピクセルがコピーモードを使用してコード化された場合、現在のピクセルについてコピーモードを無効化し得る。
[0149] 上記で説明した制約のいずれかを実施する事例において、ビデオエンコーダ20およびビデオデコーダ30は、いくつかの場合、ピクセルについて、3つの可能なモードではなく、ただ1つまたは2つのパレットベースコーディングモードが可能であると決定し得る。より具体的には、上記で説明した各制約に従って、ビデオエンコーダ20およびビデオデコーダ30は、所与のピクセルについて可能なパレットベースコーディングモードの数を2に低減し得る。上記で説明した制約のうちの1つまたは複数を使用してモード冗長性が対処されるとき、ビデオデコーダ30は、パレットモード情報を復号するために以下の擬似コードによって表される技法を実施し得る。
[0150] ビデオエンコーダ20は、同様に、説明する制約のうちの1つまたは複数を実施するために対応する技法を実施し得る。上記で説明した制約のうちのいずれか1つまたは複数を適用することによって、ビデオエンコーダ20およびビデオデコーダ30は、ピクチャ精度を維持しながら、ビットレート要件を低減しコンピューティングリソースを節約するために、本開示の様々な技法を実施し得る。例えば、ビデオエンコーダ20およびビデオデコーダ30がピクセルのための可能なパレットコーディングモードの数を2に制約する場合、モードをシグナリングするために必要とされるビット数はシングルビットに低減される。より具体的には、ビデオエンコーダ20およびビデオデコーダ30は、パレットコーディングの(本開示の前の行からのコピーモードを含む)3つのモードを依然としてサポートしながら、モードを識別するためにシングルビットシナリオを利用するように制約を実施し得る。
[0151] 図2は、本開示の様々な技法を実施し得る例示的なビデオエンコーダ20を示すブロック図である。図2は、説明のために与えられており、本開示で広く例示され説明される技法を限定するものと見なされるべきではない。説明のために、本開示では、HEVCコーディングのコンテキストにおいてビデオエンコーダ20について説明する。但し、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0152] 図2の例において、ビデオエンコーダ20は、ビデオデータメモリ98と、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構成ユニット112と、フィルタユニット114と、復号ピクチャバッファ116と、エントロピー符号化ユニット118とを含む。予測処理ユニット100は、インター予測処理ユニット120と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット120は、動き推定ユニットと、動き補償ユニットと(図示せず)を含む。ビデオエンコーダ20はまた、本開示で説明するパレットベースコーディング技法の様々な態様を行うように構成されるパレットベース符号化ユニット122を含む。他の例において、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能構成要素を含み得る。
[0153] ビデオデータメモリ98は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ98に記憶されたビデオデータは、例えば、ビデオソース18から取得され得る。復号ピクチャバッファ116は、例えば、イントラコーディングモードまたはインターコーディングモードでビデオエンコーダ20によってビデオデータを符号化する際に使用するための、参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ98および復号ピクチャバッファ116は、同期DRAM(SDRAM)を含む、ダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM(登録商標))、または他のタイプのメモリデバイスなど、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ98および復号ピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例において、ビデオデータメモリ98は、ビデオエンコーダ20の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[0154] ビデオエンコーダ20はビデオデータを受信し得る。ビデオエンコーダ20はビデオデータのピクチャのスライス中の各CTUを符号化し得る。CTUの各々は、ピクチャの等しいサイズのルーマコーディングツリーブロック(CTB)と、対応するCTBとに関連付けられ得る。CTUを符号化することの一部として、予測処理ユニット100は、CTUのCTBを徐々により小さいブロックに分割するために、4分木区分を行い得る。より小さいブロックはCUのコーディングブロックであり得る。例えば、予測処理ユニット100は、CTUに関連付けられたCTBを4つの等しいサイズのサブブロックに区分し得、サブブロックのうちの1つまたは複数を4つの等しいサイズのサブサブブロックに区分し得、以下同様である。
[0155] ビデオエンコーダ20は、CUの符号化表現(すなわち、コード化CU)を生成するために、CTUのCUを符号化し得る。CUを符号化することの一部として、予測処理ユニット100は、CUの1つまたは複数のPUの間でCUに関連付けられたコーディングブロックを区分し得る。従って、各PUは、ルーマ予測ブロックと、対応するクロマ予測ブロックとに関連付けられ得る。ビデオエンコーダ20およびビデオデコーダ30は、様々なサイズを有するPUをサポートし得る。上記で示したように、CUのサイズはCUのルーマコーディングブロックのサイズを指すことがあり、PUのサイズはPUのルーマ予測ブロックのサイズを指すことがある。特定のCUのサイズが2N×2Nであると仮定すると、ビデオエンコーダ20およびビデオデコーダ30は、イントラ予測に関して2N×2NまたはN×NのPUサイズをサポートし得、インター予測に関して2N×2N、2N×N、N×2N、N×N、または同様の対称のPUサイズをサポートし得る。ビデオエンコーダ20およびビデオデコーダ30はまた、インター予測のための2N×nU、2N×nD、nL×2N、およびnR×2NのPUサイズに関して非対称区分をサポートし得る。
[0156] インター予測処理ユニット120は、CUの各PUに対してインター予測を行うことによって、PUのための予測データを生成し得る。PUの予測データは、PUの1つまたは複数の予測サンプルブロックと、PUの動き情報とを含み得る。インター予測ユニット121は、PUがIスライス中にあるか、Pスライス中にあるか、またはBスライス中にあるかに応じて、CUのPUに対して異なる動作を行い得る。Iスライス中では、全てのPUがイントラ予測される。従って、PUがIスライス中にある場合、インター予測ユニット121は、PUに対してインター予測を行わない。従って、Iモードで符号化されたブロックに対して、予測ブロックは、同じフレーム内の以前に符号化された近隣ブロックからの空間的予測を使用して形成される。
[0157] PUがPスライス中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUの参照領域について参照ピクチャのリスト(例えば、「RefPicList0」)中の参照ピクチャを探索し得る。PUの参照領域は、PUのサンプルブロックに最も密接に対応するサンプルブロックを含んでいる、参照ピクチャ内の領域であり得る。動き推定ユニットは、PUの参照領域を含んでいる参照ピクチャのRefPicList0中の位置を示す参照インデックスを生成し得る。さらに、動き推定ユニットは、PUのコーディングブロックと、参照領域に関連付けられた参照ロケーションとの間の空間変位を示すMVを生成し得る。例えば、MVは、現在の復号ピクチャ中の座標から参照ピクチャ中の座標までのオフセットを提供する2次元ベクトルであり得る。動き推定ユニットは、PUの動き情報として参照インデックスとMVとを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照ロケーションにおける実際のまたは補間されたサンプルに基づいて、PUの予測サンプルブロックを生成し得る。
[0158] PUがBスライス中にある場合、動き推定ユニットは、PUについて単予測または双予測を行い得る。PUについて単予測を行うために、動き推定ユニットは、PUの参照領域についてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを探索し得る。動き推定ユニットは、PUの動き情報として、参照領域を含んでいる参照ピクチャのRefPicList0またはRefPicList1中の位置を示す参照インデックスと、PUのサンプルブロックと参照領域に関連付けられた参照ロケーションとの間の空間変位を示すMVと、参照ピクチャがRefPicList0中にあるかまたはRefPicList1中にあるかを示す1つまたは複数の予測方向インジケータとを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測サンプルブロックを生成し得る。
[0159] PUについて双方向インター予測を行うために、動き推定ユニットは、PUの参照領域についてRefPicList0中の参照ピクチャを探索し得、またPUの別の参照領域についてRefPicList1中の参照ピクチャを探索し得る。動き推定ユニットは、参照領域を含んでいる参照ピクチャのRefPicList0およびRefPicList1中の位置を示す参照ピクチャインデックスを生成し得る。さらに、動き推定ユニットは、参照領域に関連付けられた参照ロケーションとPUのサンプルブロックとの間の空間変位を示すMVを生成し得る。PUの動き情報は、PUの参照インデックスとMVとを含み得る。動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のサンプルまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測サンプルブロックを生成し得る。
[0160] 本開示の様々な例によれば、ビデオエンコーダ20は、パレットベースコーディングを行うように構成され得る。HEVCフレームワークに関して、一例として、パレットベースコーディング技法は、CUモードとして使用されるように構成され得る。他の例において、パレットベースコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。従って、CUのコンテキストにおいて(本開示全体で)本明細書で説明する開示されるプロセスの全てが、追加または代替として、PUモードに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明するパレットベースコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として働くように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形ブロック、長方形ブロック、またはさらには非長方形形状の領域であり得る。
[0161] パレットベース符号化ユニット122は、例えば、パレットベース符号化モードが例えばCUまたはPUのために選択されたとき、パレットベースの復号を行い得る。例えば、パレットベース符号化ユニット122は、ピクセル値を示すエントリを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの位置のピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロックの位置のうちの少なくともいくつかを、選択されたピクセル値にそれぞれ対応するパレット中のエントリに関連付ける情報をシグナリングするように構成され得る。様々な機能がパレットベース符号化ユニット122によって行われるものとして説明されるが、そのような機能の一部または全部は、他の処理ユニット、または異なる処理ユニットの組合せによって行われ得る。
[0162] パレットベース符号化ユニット122は、本明細書で説明する様々なシンタックス要素のいずれかを生成するように構成され得る。従って、ビデオエンコーダ20は、本開示で説明するパレットベースコードモードを使用してビデオデータのブロックを符号化するように構成され得る。ビデオエンコーダ20は、パレットコーディングモードを使用してビデオデータのブロックを選択的に符号化するか、または、例えばHEVCインター予測コーディングモードまたはイントラ予測コーディングモードなど、異なるモードを使用してビデオデータのブロックを符号化し得る。ビデオデータのブロックは、例えば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。ビデオエンコーダ20は、インター予測時間予測コーディングモードまたはイントラ予測空間コーディングモードでいくつかのブロックを符号化し、パレットベースコーディングモードで他のブロックを復号し得る。
[0163] イントラ予測処理ユニット126は、PUに対してイントラ予測を行うことによって、PUのための予測データを生成し得る。PUのための予測データは、PUのための予測サンプルブロックと、様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライス中のPUに対してイントラ予測を行い得る。
[0164] PUに対してイントラ予測を行うために、イントラ予測処理ユニット126は、PUのための予測データの複数のセットを生成するために複数のイントラ予測モードを使用し得る。PUのための予測データのセットを生成するためにいくつかのイントラ予測モードを使用するとき、イントラ予測処理ユニット126は、そのイントラ予測モードに関連付けられた方向へ、PUの予測ブロックにわたって、近隣PUのサンプルブロックからサンプルの値を延ばし得る。近隣PUは、PU、CU、およびCTUについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、例えば、33個の方向性イントラ予測モードを使用し得る。いくつかの例において、イントラ予測モードの数は、PUに関連付けられた領域のサイズに依存し得る。
[0165] 予測処理ユニット100は、PUについてインター予測処理ユニット120によって生成された予測データ、またはPUについてイントラ予測処理ユニット126によって生成された予測データの中から、CUのPUのための予測データを選択し得る。いくつかの例において、予測処理ユニット100は、予測データのセットのレート/ひずみメトリックに基づいて、CUのPUのための予測データを選択する。選択された予測データの予測サンプルブロックは、本明細書において、選択された予測サンプルブロックと呼ばれることがある。
[0166] 残差生成ユニット102は、CUのコーディングブロック(例えば、ルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロック)と、CUのPUの選択された予測サンプルブロック(例えば、予測ルーマブロック、予測Cbブロックおよび予測Crブロック)とに基づいて、CUの残差ブロック(例えば、ルーマ残差ブロック、Cb残差ブロックおよびCr残差ブロック)を生成し得る。例えば、残差生成ユニット102は、残差ブロック中の各サンプルが、CUのコーディングブロック中のサンプルと、CUのPUの対応する選択された予測サンプルブロック中の対応するサンプルとの間の差分に等しい値を有するようにCUの残差ブロックを生成し得る。
[0167] 変換処理ユニット104は、CUに関連付けられる残差ブロックをCUのTUに関連付けられる変換ブロックに区分するために、4分木区分を行い得る。従って、いくつかの例において、TUは、ルーマ変換ブロックと、2つのクロマ変換ブロックとに関連付けられ得る。CUのTUのルーマ変換ブロックとクロマ変換ブロックとのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づくことも、または基づかないこともある。「残差4分木」(RQT)として知られる4分木構造は、領域の各々に関連付けられたノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
[0168] 変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUの各TUについて変換係数ブロックを生成し得る。変換処理ユニット104は、TUに関連付けられた変換ブロックに様々な変換を適用し得る。例えば、変換処理ユニット104は、離散コサイン変換(DCT)、方向性変換、または概念的に同様の変換を変換ブロックに適用し得る。いくつかの例において、変換処理ユニット104は変換ブロックに変換を適用しない。そのような例において、変換ブロックは、変換係数ブロックとして扱われ得る。
[0169] 量子化ユニット106は、係数ブロック中の変換係数を量子化し得る。量子化プロセスは、変換係数の一部または全てに関連付けられたビット深度を低減し得る。例えば、nビット変換係数は、量子化中にmビット変換係数に切り捨てられ得、ここで、nはmよりも大きい。量子化ユニット106は、CUに関連付けられた量子化パラメータ(QP)値に基づいて、CUのTUに関連付けられた係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連付けられたQP値を調整することによって、CUに関連付けられた係数ブロックに適用される量子化の程度を調整し得る。量子化は情報の損失をもたらすことがあり、従って、量子化された変換係数は、元の係数よりも低い精度を有し得る。
[0170] 逆量子化ユニット108および逆変換処理ユニット110は、それぞれ、係数ブロックから残差ブロックを再構成するために、係数ブロックに逆量子化および逆変換を適用し得る。再構成ユニット112は、TUに関連付けられた再構成された変換ブロックを生成するために、予測処理ユニット100によって生成された1つまたは複数の予測サンプルブロックからの対応するサンプルに、再構成された残差ブロックを加算し得る。このようにCUの各TUのための変換ブロックを再構成することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構成し得る。
[0171] フィルタユニット114は、CUに関連付けられたコーディングブロック中のブロッキングアーティファクトを低減するために、1つまたは複数のデブロッキング動作を行い得る。復号ピクチャバッファ116は、フィルタユニット114が、再構成されたコーディングブロックに対して1つまたは複数のデブロッキング動作を行った後に、再構成されたコーディングブロックを記憶し得る。インター予測処理ユニット120は、他のピクチャのPUに対してインター予測を行うために、再構成されたコーディングブロックを含んでいる参照ピクチャを使用し得る。さらに、イントラ予測処理ユニット126は、CUと同じピクチャ中の他のPUに対してイントラ予測を行うために、復号ピクチャバッファ116中の再構成されたコーディングブロックを使用し得る。
[0172] エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能構成要素からデータを受信し得る。例えば、エントロピー符号化ユニット118は、量子化ユニット106から係数ブロックを受信し得、予測処理ユニット100からシンタックス要素を受信し得る。エントロピー符号化ユニット118は、エントロピー符号化データを生成するために、データに対して1つまたは複数のエントロピー符号化演算を行い得る。例えば、エントロピー符号化ユニット118は、CABAC演算、コンテキスト適応型可変長コーディング(CAVLC:context-adaptive variable length coding)演算、可変対可変(V2V:variable-to-variable)長コーディング演算、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)演算、確率間隔区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング演算、指数ゴロム符号化演算、または別のタイプのエントロピー符号化演算をデータに対して行い得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成されたエントロピー符号化データを含むビットストリームを出力し得る。例えば、ビットストリームは、CUのためのRQTを表すデータを含み得る。
[0173] いくつかの例において、残差コーディングは、パレットコーディングとともに行われない。従って、ビデオエンコーダ20は、パレットコーディングモードを使用してコーディングするとき、変換または量子化を行わないことがある。さらに、ビデオエンコーダ20は、残差データとは別個に、パレットコーディングモードを使用して生成されたデータをエントロピー符号化し得る。
[0174] 図3は、本開示の技法を実施するように構成される例示的なビデオデコーダ30を示すブロック図である。図3は、説明のために与えられており、本開示において広く例示され説明される技法を限定するものではない。説明のために、本開示では、HEVCコーディングのコンテキストにおいてビデオデコーダ30について説明する。但し、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0175] 図3の例において、ビデオデコーダ30は、ビデオデータメモリ148と、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構成ユニット158と、フィルタユニット160と、復号ピクチャバッファ162とを含む。予測処理ユニット152は、動き補償ユニット164と、イントラ予測処理ユニット166とを含む。ビデオデコーダ30はまた、本開示で説明するパレットベースコーディング技法の様々な態様を行うように構成されるパレットベース復号ユニット165を含む。他の例において、ビデオデコーダ30は、より多数の、より少数の、または異なる機能構成要素を含み得る。
[0176] ビデオデータメモリ148は、ビデオデコーダ30の構成要素によって復号されるべき、符号化ビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ148に記憶されるビデオデータは、例えば、コンピュータ可読媒体16から、例えば、カメラなどのローカルビデオソースから、ビデオデータのワイヤードもしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって取得され得る。ビデオデータメモリ148は、符号化ビデオビットストリームからの符号化ビデオデータを記憶するコード化ピクチャバッファ(CPB:coded picture buffer)を形成し得る。復号ピクチャバッファ162は、例えば、イントラコーディングモードまたはインターコーディングモードでビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ148および復号ピクチャバッファ162は、同期DRAM(SDRAM)を含む、ダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、または他のタイプのメモリデバイスなど、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ148および復号ピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例において、ビデオデータメモリ148は、ビデオデコーダ30の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[0177] ビデオデータメモリ148、すなわち、CPBは、ビットストリームの符号化ビデオデータ(例えば、NALユニット)を受信し、記憶し得る。エントロピー復号ユニット150は、ビデオデータメモリ148から符号化ビデオデータ(例えば、NALユニット)を受信し、NALユニットをパースしてシンタックス要素を復号し得る。エントロピー復号ユニット150は、NALユニット中のエントロピー符号化シンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構成ユニット158、およびフィルタユニット160は、ビットストリームから取得(例えば、抽出)されたシンタックス要素に基づいて、復号ビデオデータを生成し得る。
[0178] ビットストリームのNALユニットは、コード化スライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、コード化スライスNALユニットからシンタックス要素を抽出し、エントロピー復号し得る。コード化スライスの各々は、スライスヘッダと、スライスデータとを含み得る。スライスヘッダは、スライスに関係するシンタックス要素を含んでいることがある。スライスヘッダ中のシンタックス要素は、スライスを含んでいるピクチャに関連付けられたPPSを識別するシンタックス要素を含み得る。
[0179] ビットストリームからのシンタックス要素を復号することに加えて、ビデオデコーダ30は、区分されていないCUに対して再構成動作を行い得る。区分されていないCUに対して再構成動作を行うために、ビデオデコーダ30は、CUの各TUに対して再構成動作を行い得る。CUの各TUについて再構成動作を行うことによって、ビデオデコーダ30は、CUの残差ブロックを再構成し得る。
[0180] CUのTUに対して再構成動作を行うことの一部として、逆量子化ユニット154は、TUに関連付けられた係数ブロックを逆量子化(inverse quantize)、すなわち、逆量子化(de-quantize)し得る。逆量子化ユニット154は、量子化の程度を決定するために、また同様に、逆量子化ユニット154が適用すべき逆量子化の程度を決定するために、TUのCUに関連付けられたQP値を使用し得る。すなわち、圧縮比、すなわち、元のシーケンスと圧縮されたシーケンスとを表すために使用されるビット数の比は、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比はまた、採用されたエントロピーコーディングの方法に依存し得る。
[0181] 逆量子化ユニット154が係数ブロックを逆量子化した後に、逆変換処理ユニット156は、TUに関連付けられた残差ブロックを生成するために、係数ブロックに1つまたは複数の逆変換を適用し得る。例えば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT:Karhunen-Loeve transform)、逆回転変換、逆方向性変換、または別の逆変換を係数ブロックに適用し得る。
[0182] イントラ予測を使用してPUが符号化される場合、イントラ予測処理ユニット166は、PUのための予測ブロックを生成するためにイントラ予測を行い得る。イントラ予測処理ユニット166は、イントラ予測モードを使用して、空間的に近接するPUの予測ブロックに基づいてPUのための予測ルーマブロック、予測Cbブロックおよび予測Crブロックを生成し得る。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUのためのイントラ予測モードを決定し得る。
[0183] 予測処理ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)と第2の参照ピクチャリスト(RefPicList1)とを構成し得る。さらに、インター予測を使用してPUが符号化された場合、エントロピー復号ユニット150は、PUについての動き情報を抽出し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUのための1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUのための1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUのための予測ブロック(例えば、予測ルーマブロック、予測Cbブロックおよび予測Crブロック)を生成し得る。
[0184] 再構成ユニット158は、CUのコーディングブロック(例えば、ルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロック)を再構成するために、適用可能なとき、CUのTUに関連付けられた変換ブロック(例えば、ルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロック)と、CUのPUの予測ブロック(例えば、ルーマブロック、CbブロックおよびCrブロック)とを、すなわち、イントラ予測データまたはインター予測データのいずれかを使用し得る。例えば、再構成ユニット158は、CUのコーディングブロック(例えば、ルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロック)を再構成するために、変換ブロック(例えば、ルーマ変換ブロック、Cb変換ブロックおよびCr変換ブロック)のサンプルを、予測ブロック(例えば、予測ルーマブロック、予測Cbブロックおよび予測Crブロック)の対応するサンプルに加算し得る。
[0185] フィルタユニット160は、CUのコーディングブロック(例えば、ルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロック)に関連付けられたブロッキングアーティファクトを低減するために、デブロッキング演算を行い得る。ビデオデコーダ30は、CUのコーディングブロック(例えば、ルーマコーディングブロック、CbコーディングブロックおよびCrコーディングブロック)を復号ピクチャバッファ162に記憶し得る。復号ピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のための、参照ピクチャを提供し得る。例えば、ビデオデコーダ30は、復号ピクチャバッファ162中のブロック(例えば、ルーマブロック、CbブロックおよびCrブロック)に基づいて、他のCUのPUに対してイントラ予測演算またはインター予測演算を行い得る。このようにして、ビデオデコーダ30は、有意係数ブロックの変換係数レベルをビットストリームから抽出し、変換係数レベルを逆量子化し、変換ブロックを生成するため、変換ブロックに少なくとも部分的に基づいてコーディングブロックを生成するため、およびコーディングブロックを表示のために出力するために、変換係数レベルに変換を適用し得る。
[0186] 本開示の様々な例によれば、ビデオデコーダ30は、パレットベースコーディングを行うように構成され得る。パレットベース復号ユニット165は、例えば、パレットベース復号モードが、例えばCUまたはPUのために選択されたとき、パレットベースの復号を行い得る。例えば、パレットベース復号ユニット165は、ピクセル値を示すエントリを有するパレットを生成するように構成され得る。さらに、この例において、パレットベース復号ユニット165は、ビデオデータのブロックの少なくともいくつかの位置をパレット中のエントリに関連付ける情報を受信し得る。この例において、パレットベース復号ユニット165は、その情報に基づいてパレット中のピクセル値を選択し得る。さらに、この例において、パレットベース復号ユニット165は、選択されたピクセル値に基づいてブロックのピクセル値を再構成し得る。様々な機能がパレットベース復号ユニット165によって行われるものとして説明されるが、そのような機能の一部または全部は、他の処理ユニット、または異なる処理ユニットの組合せによって行われ得る。
[0187] パレットベース復号ユニット165は、パレットコーディングモード情報を受信し、パレットコーディングモードがブロックに適用されることをパレットコーディングモード情報が示すとき、上記の動作を行い得る。パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、または、他のモード情報が異なるモードの使用を示すとき、パレットベース復号ユニット165は、パレットコーディングモードがブロックに適用されないことをパレットコーディングモード情報が示すとき、例えば、HEVCインター予測コーディングモードまたはイントラ予測コーディングモードなど、非パレットベースコーディングモードを使用してビデオデータのブロックを復号する。ビデオデータのブロックは、例えば、HEVCコーディングプロセスに従って生成されるCUまたはPUであり得る。ビデオデコーダ30は、インター予測時間予測コーディングモードまたはイントラ予測空間コーディングモードでいくつかのブロックを復号し、パレットベースコーディングモードで他のブロックを復号し得る。パレットベースコーディングモードは、複数の異なるパレットベースコーディングモードのうちの1つを備え得るか、または単一のパレットベースコーディングモードがあり得る。
[0188] 本開示の技法のうちの1つまたは複数によれば、ビデオデコーダ30、具体的にはパレットベース復号ユニット165は、パレットコード化ビデオブロックのパレットベースビデオ復号を行い得る。上記で説明したように、ビデオデコーダ30によって復号されたパレットは、ビデオエンコーダ20によって明示的に符号化およびシグナリングされるか、受信されたパレットコード化ブロックに関してビデオデコーダ30によって再構成されるか、前のパレットエントリから予測されるか、以前のピクセル値から予測されるか、またはこれらの組合せであり得る。
[0189] 図4は、ビデオエンコーダ20およびビデオデコーダ30が本開示の前の行からのコピーモードをサポートする場合における、モード識別シンボルの2つのビンのためのコンテキストコーディング割当ての一例を示す表200である。図4に示されているシナリオにおいて、現在のピクセルの上方近隣ピクセルは、ランモードに従って以前コード化された。さらに、図4に示されている例において、ビデオエンコーダ20および/またはビデオデコーダ30は、以前コード化された近隣ピクセルのために使用されたコーディングモードに基づいて、動的に切捨単項コードワードの第1のビンのコンテキストを決定し得る。例えば、以前コード化された近隣ピクセルがランモードを使用してコード化された場合、ビデオエンコーダ20および/またはビデオデコーダ30は、本明細書で「コンテキストA」と呼ばれる単一のCABACコンテキストを使用して第1のビンをコーディングし得る。図4に示されているように、コンテキストAは、ランモードと、コピーモードと、前の行からのコピーモードとの各々について可能なコンテキストを含む。表200の特定の例において、ビデオエンコーダ20およびビデオデコーダ30は、コピーモードと前の行からのコピーモードの両方について共有されたコンテキスト、すなわち1の値を使用する。
[0190] 対照的に、切捨単項コードワードの第2のビンをコーディングするために、ビデオエンコーダ20および/またはビデオデコーダ30は、以前コード化された近隣ピクセルのために使用されるパレットベースコーディングモードに依存しないコンテキストを使用し得る。従って、ビデオエンコーダ20および/またはビデオデコーダ30は、以前コード化された近隣ピクセルのいずれかに関係するモード識別情報とは無関係に切捨単項コードワードの第2のビンをコーディングし得る。例えば、第2のビンは、以前コード化された近隣ピクセルのいずれかに関係する変化するモード情報に鑑みて不変のままであり得る。ビデオエンコーダ20および/またはビデオデコーダ30が切捨単項コードワードの第2のビンをコーディングするために使用し得るCABACコンテキストは、本明細書では「コンテキストC」と呼ばれる。
[0191] 表200の特定の例において、以前コード化された上方近隣ピクセルは、ランモードに従ってコード化された。この例において、ビデオエンコーダ20およびビデオデコーダ30は、切捨単項コードワードの第2のビンをコーディングするために可能なコンテキストを決定する際にランモードを排除し得る。図4に示されているように、表200は、ランモードに対応するためのコンテキストCの値を含まない。
[0192] 図5は、概念図であり、ビデオエンコーダ20およびビデオデコーダ30が本明細書で説明する制約のうちの1つまたは複数を実施し得る例示的なパレットコード化ブロック300を示す。パレットコード化ブロック300は、現在の開始ピクセル302と、参照開始ピクセル304と、以前コード化されたネイバーピクセル306と、左ネイバー参照ピクセル308とを含む。参照開始ピクセル304は、対応するランの1番目のピクセルであり、ランの残りのピクセルは、図5において参照開始ピクセル304と共通の陰影図式で示されている。現在の開始ピクセル302は、対応するランの1番目のピクセルであり、ランの残りのピクセルは、図5において現在の開始ピクセル302と共通の陰影図式で示されている。
[0193] 例えば、ビデオデコーダ30は、パレットコード化ブロック300を復号するためのパレットを決定し得、ここで、パレットは、それぞれのパレットインデックスをそれぞれ有する1つまたは複数のパレットエントリを含む。さらに、ビデオデコーダ30は、参照開始ピクセル304において開始し、所定のランレングスの最後に終了する、パレットコード化ブロック300のそれらのピクセルのためのパレットインデックスの参照ランを決定し得る。ビデオデコーダ30は、パレットコード化ブロック300内でパレットインデックスの現在のランを決定するためにパレットインデックスの参照ランを使用し得、ここで、現在のランは、現在の開始ピクセル302において開始し、所定のランレングスの最後に終了する。
[0194] より具体的には、現在のランを決定するために、ビデオデコーダ30は、参照ランを開始する参照開始ピクセル304のためのパレットインデックスを位置特定し得る。図示のように、参照開始ピクセル304のインデックスは、現在の開始ピクセル302から少なくとも1つのライン離間する。さらに、ビデオデコーダ30は参照ランのランレングスを決定し得、ここで、参照ランの最後のインデックスは、ブロック中で現在の開始ピクセル302のインデックスから少なくとも1つのインデックスだけ離れる。ビデオデコーダ30デバイスは、参照ラン中に含まれるインデックスをパレットインデックスの現在のランとしてコピーし、パレットを使用してパレットインデックスのコピーされた現在のランにマッピングされたブロックのピクセルを復号し得る。
[0195] いくつかの例において、ビデオエンコーダ20およびビデオデコーダ30は、ネイバーピクセル306が前の行からのコピーモードでコード化され、左ネイバーピクセル306のためのパレットインデックスがネイバー参照ピクセル308からコピーされたと決定し得る。図示のように、パレットコード化ブロック300の例において、ネイバー参照ピクセル308は、左側ネイバーピクセル306と現在の開始ピクセル302とを含む行の3つの行上方に配置される。より具体的には、左ネイバーピクセル306および現在の開始ピクセル302は、パレットコード化ブロック300の(行番号4をもつ)5番目の行中に配置されるが、ネイバー参照ピクセル308は、パレットコード化ブロック300の(行番号1をもつ)2番目の行中に配置される。
[0196] 本開示の制約を適用すると、ビデオエンコーダ20およびビデオデコーダ30は、現在の開始ピクセル302が、前の行からのコピーモードに従ってコード化された場合、ネイバー参照ピクセル308を含む同じ(すなわち、2番目の)行からインデックスを引き継ぐことができないと決定し得る。例えば、ビデオエンコーダ20およびビデオデコーダ30は、現在の開始ピクセル302と同じ列中にある2番目の行のピクセルがネイバー参照ピクセル308と同じラン中にあると決定し得る。次に、ビデオエンコーダ20およびビデオデコーダ30は、ネイバー参照ピクセル308と同じラン中にある潜在的参照ピクセルが、現在の開始ピクセル302のために引き継ぐべきユニークパレットインデックスを提供しないと決定し得る。従って、ビデオエンコーダ20およびビデオデコーダ30は、現在の開始ピクセル302のための参照ピクセルが、ネイバー参照ピクセル308を含む行に先行する行中に配置されると決定し得る。
[0197] パレットコード化ブロック300の特定の例において、ネイバー参照ピクセル308の行に先行する唯一の行は、パレットコード化ブロック300の(行番号0をもつ)1番目の行である。従って、ビデオエンコーダ20およびビデオデコーダ30は、1番目の行と現在の開始ピクセル302を含む5番目の列との交差を位置特定することによって参照開始ピクセル304を識別し得る。このようにして、図5は、対応する参照ピクセル(この場合では参照開始ピクセル304)が行0中に含まれるように、現在のピクセル302が本開示の前の行からのコピーモードに従ってパレットコード化される一例を示している。
[0198] 図5の特定の例において、参照ピクセルランと現在のピクセルランとのマッチングレングスは6つのピクセルである。ビデオエンコーダ20は、参照開始ピクセル304のインデックスにおいて開始する6つの連続するインデックスを、現在の開始ピクセル302において開始する6つのピクセルの対応するランのためのインデックスにコピーし得る。それぞれのピクセルランのマッチングレングスを符号化し、ビデオデコーダ30にシグナリングする。さらに、ビデオエンコーダ20は、ビデオデコーダ30に対して6のマッチングレングスを符号化し得る。
[0199] ビデオデコーダ30は、パレットコード化ブロック300を再構成するために、現在の開始ピクセル302が前の行からのコピーモードで符号化されたことを示すシグナリングされた情報、並びにシグナリングされたマッチングレングスを使用し得る。例えば、ビデオデコーダ30は、参照開始ピクセル304において開始する6ピクセル長ランのインデックスを、現在の開始ピクセル302において開始する6ピクセル長ランにコピーし得る。いくつかの例において、ビデオエンコーダ20は、減分された値としてマッチングレングスをシグナリングし得る。例えば、ビデオエンコーダ20は、マッチングレングスの最小値だけマッチングレングスを減分し得る。そのような例において、ビデオデコーダ30は、受信された値をマッチングレングスの所定の最小値だけ増分することによってマッチングレングスを再構成し得る。
[0200] 参照ピクセルが現在のピクセルについてそれから選択され得る可能な行の数を説明した様式で制約することによって、ビデオエンコーダ20およびビデオデコーダ30は、ピクチャ精度を維持しながらコンピューティングリソースを節約するように本開示の技法を実施し得る。より具体的には、ビデオエンコーダ20およびビデオデコーダ30は、探索されるべき行の数を限定し、それにより、メモリアクセスおよび処理クロックサイクル要件を低減し得る。さらに、上記で説明したように減分されたマッチングレングス値を使用することによって、ビデオエンコーダ20およびビデオデコーダ30は、ピクチャ精度を維持しながら、マッチングレングスを取得するためのビットレートおよびコンピューティングリソースを節約するように本開示の技法を実施し得る。
[0201] 図6は、ビデオ復号デバイスが本開示の1つまたは複数のパレットベース復号技法を行い得る例示的なプロセス320を示すフローチャートである。プロセス320は本開示の態様による様々なデバイスによって行われ得るが、プロセス320は、説明を容易にするために、ここでは図1および図3のビデオデコーダ30に関して説明される。
[0202] 図6の例において、ビデオデコーダ30は、パレットコード化ブロックのためのパレットを決定する(322)。様々な例において、ビデオデコーダ30は、ビットストリーム中で受信されるパレット符号化ブロックのためのパレットを独立して決定するか、別のパレットコード化ブロックからパレットをコピーするか、またはビットストリーム中でパレット自体を受信し得る。
[0203] さらに、ビデオデコーダ30は、パレットコード化ブロック内で参照ランのためのパレットインデックスを決定し得る(324)。例えば、ビデオデコーダ30は、最初の連続する一連のピクセルのためのパレットインデックスを再構成し得、これらは、今度は、1つまたは複数の後続の一連のピクセルのための参照ピクセルのランとして働き得る。
[0204] ビデオデコーダ30は、参照インデックスが現在のランの開始インデックスの1つまたは複数のライン上方に離間したように、参照ラン中の参照インデックスを位置特定し得る(326)。例えば、現在復号されているピクセルのパレットインデックスは、現在のランの開始インデックスとして働き得る。さらに、参照ラン中の第1のピクセルのパレットインデックスは、参照インデックスとして働き得る。図5のパレットコード化ブロック300の例に適用されると、ビデオデコーダ30は、参照インデックスとして参照開始ピクセル308のパレットインデックスを識別し、現在のランの開始ピクセルとして現在の開始ピクセル302のパレットインデックスを識別し得る。
[0205] ビデオデコーダ30は、参照ランのランレングスを決定し得る(328)。様々な例によれば、ビデオデコーダ30は、現在のランにコピーすべき参照ランの連続するインデックスの数を決定するために、そのランレングスを使用し得る。例えば、ビデオデコーダ30は、ランレングスが、ビデオエンコーダ20から受信される符号化ビデオビットストリーム中でシグナリングされたマッチングレングスに等しいと決定し得る。次に、ビデオデコーダ30は、参照インデックスにおいて開始しランレングスまでカウントアップして、参照ランのパレットインデックスを現在のランにコピーする(330)。より具体的には、ビデオデコーダ30は、開始ピクセルにおいて開始し、決定されたランレングスまでカウントアップするように、現在のランを決定し得る。さらに、ビデオデコーダ30は、それぞれのコピーされたパレットインデックスによって識別される色情報を使用して現在のランのピクセルを再構成し得る(332)。
[0206] このようにして、様々な例において、本開示は、ビデオデータを復号する方法を対象とし、本方法は、ビデオデータのブロックを復号するためのパレットを決定することと、ここで、パレットが、それぞれのパレットインデックスをそれぞれ有する1つまたは複数のパレットエントリを含む、ビデオデータのブロックの第1のピクセルのための第1の複数のパレットインデックスを決定することと、第1の複数のパレットインデックスに基づいてビデオデータのブロックの第2のピクセルのための第2の複数のパレットインデックスを決定することとを含む。本方法のいくつかの実施形態によれば、第2の複数のパレットインデックスを決定することは、第1の複数のパレットインデックス中に含まれる参照インデックスを位置特定することと、ここで、参照インデックスが、第2の複数のパレットインデックスの最初のインデックスから少なくとも1つのライン離間する、第1の複数のインデックスのランのランレングスを決定することと、ここで、ランの最後のインデックスが、ブロック中で第2の複数のパレットインデックスの最初のインデックスから少なくとも1つのインデックスだけ離れる、ラン中に含まれる第1の複数のインデックスを第2の複数のパレットインデックスとしてコピーすることと、パレットを使用して、コピーされた第2の複数のパレットインデックスに関連するブロックの複数のピクセルを復号することとを含む。
[0207] 本方法のいくつかの実施形態によれば、参照インデックスを位置特定することは、ブロックの探索範囲内で参照インデックスを位置特定することを含む。1つのそのような実施形態において、探索範囲は、ブロックの少なくとも2つのラインに対応するパレットインデックスのサブセットを含む。別のそのような実施形態において、本方法は、探索範囲を表すコードワードを復号することによって探索範囲を取得することをさらに含む。いくつかの例によれば、コードワードは切捨単項フォーマットで表される。
[0208] 本方法のいくつかの例示的な実施形態において、ランの最後のインデックスは、ブロック中で第2の複数のパレットインデックスの最初のインデックスからインデックスの少なくとも1つのラインだけ離れる。いくつかの例示的な実施形態によれば、本方法は、近隣インデックスに関連するパレットベースコーディングモードを決定することと、近隣インデックスが、第2の複数のパレットインデックスの最初のインデックスに隣接して配置される、近隣インデックスに関連するパレットベースコーディングモードが前の行からのコピーモードを含む場合、参照インデックスがネイバー参照インデックスから少なくとも1つのライン離間すると決定することとをさらに含み得、ここで、近隣インデックスはネイバー参照インデックスからコピーされる。1つのそのような例において、ネイバー参照インデックスは、近隣インデックスの少なくとも2つのライン上方に配置され、参照インデックスは、ネイバー参照インデックスの少なくとも1つのライン上方に配置される。別のそのような例において、本方法は、参照インデックスを位置特定すべきブロックの探索範囲を制約することをさらに含み得る。
[0209] いくつかの例において、ランレングスを決定することは、第1の複数のパレットインデックスと第2の複数のパレットインデックスとの間のマッチングレングスを決定することを含み、ランレングスは、第1の複数と第2の複数との間の連続するマッチングインデックスの数を示す。いくつかの例において、ラン中に含まれる第1の複数のインデックスを第2の複数のパレットインデックスとしてコピーすることは、第1の複数のパレットインデックスと第2の複数のパレットインデックスとの間のマッチングレングスに基づいて第1の複数のパレットインデックスをコピーすることを含む。1つのそのような例によれば、本方法は、符号化ビデオビットストリーム中で、マッチングレングスの減分された値を受信することをさらに含む。
[0210] 様々な例において、本方法はワイヤレス通信デバイス上で実行可能であり、本デバイスは、ビデオデータを記憶するように構成されるメモリと、メモリに記憶されたビデオデータを処理するための命令を実行するように構成されるプロセッサと、ビデオデータのブロックを受信するように構成される受信機とを含む。いくつかの例において、ワイヤレス通信デバイスはセルラー電話であり、復号されるべきビデオデータのブロックは受信機によって受信され、セルラー通信規格に従って変調される。本明細書で説明する復号技法は、様々な例において、実行されたとき、ビデオ復号デバイスの1つまたは複数のプロセッサに、本技法のうちのいずれか1つもしくは複数、またはそれらの任意の組合せを行わせる命令で符号化されたコンピュータ可読記憶媒体またはコンピュータ可読記憶デバイスによって実施され得る。本明細書で説明する復号技法は、様々な例において、符号化ビデオデータを記憶するように構成されるメモリと、本技法のうちのいずれか1つもしくは複数、またはそれらの任意の組合せを行うように構成される1つまたは複数のプロセッサとを含むデバイスによって実施され得る。
[0211] 図7は、ビデオ符号化デバイスが本開示の1つまたは複数のパレットベース復号技法を行い得る例示的なプロセス350を示すフローチャートである。プロセス350は本開示の態様による様々なデバイスによって行われ得るが、プロセス350は、説明を容易にするために、ここでは図1および図2のビデオエンコーダ20に関して説明される。
[0212] 図7の例において、ビデオエンコーダ20は、パレットコード化ブロックのためのパレットを決定する(352)。様々な例において、ビデオエンコーダ20は、パレット符号化ブロックのための新しいパレットを構成するか、または別のパレットコード化ブロックからパレットをコピーするか、またはパレットベースビデオコーディング技法に合致する他の方法でパレットを決定し得る。
[0213] さらに、ビデオエンコーダ20は、パレットコード化ブロック内で参照ランのためのパレットインデックスを決定し得る(354)。例えば、ビデオエンコーダ20は、最初の連続する一連のピクセルのためのパレットインデックスを割り当て得、これらは、今度は、1つまたは複数の後続の一連のピクセルのための参照ピクセルのランとして働き得る。
[0214] ビデオエンコーダ20は、参照インデックスが現在のランの開始インデックスの1つまたは複数のライン上方に離間したように、参照ラン中の参照インデックスを位置特定し得る(356)。例えば、現在符号化されているピクセルのパレットインデックスは、現在のランの開始インデックスとして働き得る。さらに、参照ラン中の第1のピクセルのパレットインデックスは、参照インデックスとして働き得る。図5のパレットコード化ブロック300の例を適用すると、ビデオエンコーダ20は、参照インデックスとして参照開始ピクセル308のパレットインデックスを識別し、現在のランの開始ピクセルとして現在の開始ピクセル302のパレットインデックスを識別し得る。
[0215] ビデオエンコーダ20は、参照ランのランレングスを決定し得る(358)。様々な例によれば、ビデオエンコーダ20は、現在のランにコピーすべき参照ランの連続するインデックスの数を決定するために、そのランレングスを使用し得る。次に、ビデオエンコーダ20は、参照インデックスにおいて開始しランレングスまでカウントアップして、参照ランのパレットインデックスを現在のランにコピーする(360)。より具体的には、ビデオエンコーダ20は、開始ピクセルにおいて開始し、決定されたランレングスまでカウントアップするように、現在のランを決定し得る。ビデオエンコーダ20は、パレットを使用して各それぞれのピクセルの色情報を識別するために、参照ランからパレットインデックスをコピーすることによって現在のランのピクセルを符号化し得る(362)。さらに、ビデオエンコーダ20は、(例えば、切捨単項コードワードの形態の)コーディングモードをビデオデコーダ30にシグナリングし得る(364)。パレットベースコーディングモードを識別する情報をシグナリングすることによって、ビデオエンコーダ20は、ビデオデコーダ30が現在のランを再構成するために逆の技法を実施することを可能にし得る。例えば、ビデオエンコーダ20が、現在の開始ピクセルについて前の行からのコピーモードを識別するためのコードワードをシグナリングした場合、ビデオデコーダ30は、そのシグナリングされた情報を使用して参照ランのパレットインデックスを現在のランにコピーし、それにより、コーディング精度を維持しながらコーディング効率を改善し得る。
[0216] いくつかの例において、本開示は、ビデオデータを符号化する方法を開示し、本方法は、ビデオデータのブロックを復号するためのパレットを決定することと、ここで、パレットが、それぞれのパレットインデックスをそれぞれ有する1つまたは複数のパレットエントリを含む、ビデオデータのブロックの第1のピクセルのための第1の複数のパレットインデックスを決定することと、第1の複数のパレットインデックスに基づいてビデオデータのブロックの第2のピクセルのための第2の複数のパレットインデックスを決定することとを含む。これらの例示的な方法によれば、第2の複数のパレットインデックスを決定することは、第1の複数のパレットインデックス中に含まれる参照インデックスを位置特定することと、ここで、参照インデックスが、第2の複数のパレットインデックスの最初のインデックスから少なくとも1つのライン離間する、第1の複数のインデックスのランのランレングスを決定することと、ここで、ランの最後のインデックスが、ブロック中で第2の複数のパレットインデックスの最初のインデックスから少なくとも1つのインデックスだけ離れる、ラン中に含まれる第1の複数のインデックスを第2の複数のパレットインデックスとしてコピーすることと、パレットを使用して、コピーされた第2の複数のパレットインデックスに関連するブロックの複数のピクセルを符号化することとを含む。
[0217] いくつかの例において、参照インデックスを位置特定することは、ブロックの探索範囲内で参照インデックスを位置特定することを含む。1つのそのような例によれば、探索範囲は、ブロックの少なくとも2つのラインに対応するパレットインデックスのサブセットを含む。いくつかの例において、本方法は、探索範囲を表すコードワードを符号化することと、符号化ビデオビットストリーム中で符号化コードワードをシグナリングすることとをさらに含む。1つのそのような例によれば、コードワードを符号化することは、コードワードを切捨単項フォーマットで符号化することを含む。
[0218] 本方法のいくつかの例示的な実施形態によれば、ランの最後のインデックスは、ブロック中で第2の複数のパレットインデックスの最初のインデックスからインデックスの少なくとも1つのラインだけ離れる。いくつかの例において、本方法は、近隣インデックスに関連するパレットベースコーディングモードを決定することと、近隣インデックスが、第2の複数のパレットインデックスの最初のインデックスに隣接して配置される、近隣インデックスに関連するパレットベースコーディングモードが前の行からのコピーモードを含む場合、参照インデックスがネイバー参照インデックスから少なくとも1つのライン離間すると決定することとをさらに含み得、ここで、近隣インデックスはネイバー参照インデックスからコピーされる。1つのそのような例において、ネイバー参照インデックスは、近隣インデックスの少なくとも2つのライン上方に配置され、参照インデックスは、ネイバー参照インデックスの少なくとも1つのライン上方に配置される。他のそのような例において、本方法は、参照インデックスを位置特定すべきブロックの探索範囲を制約することをさらに含み得る。1つのそのような例によれば、ランレングスを決定することは、第1の複数のパレットインデックスと第2の複数のパレットインデックスとの間のマッチングレングスを決定することを含み、ランレングスは、第1の複数と第2の複数との間の連続するマッチングインデックスの数を示し、ラン中に含まれる第1の複数のインデックスを第2の複数のパレットインデックスとしてコピーすることは、第1の複数のパレットインデックスと第2の複数のパレットインデックスとの間のマッチングレングスに基づいて第1の複数のパレットインデックスをコピーすることを含む。一実施形態によれば、本方法は、符号化ビデオビットストリーム中で、マッチングレングスの減分された値をシグナリングすることをさらに含む。
[0219] 様々な例において、本方法はワイヤレス通信デバイス上で実行可能であり得、本デバイスは、ビデオデータを記憶するように構成されるメモリと、メモリに記憶されたビデオデータを処理するための命令を実行するように構成されるプロセッサと、ブロックを表す符号化ビデオデータを送信するように構成される送信機とを含む。1つのそのような例において、ワイヤレス通信デバイスはセルラー電話であり、符号化ビデオデータは送信機によって送信され、セルラー通信規格に従って変調される。本明細書で説明する符号化技法は、様々な例において、実行されたとき、ビデオ符号化デバイスの1つまたは複数のプロセッサに、本技法のうちのいずれか1つもしくは複数、またはそれらの任意の組合せを行わせる命令で符号化されたコンピュータ可読記憶媒体またはコンピュータ可読記憶デバイスによって実施され得る。本明細書で説明する符号化技法は、様々な例において、ビデオデータを記憶するように構成されるメモリと、本技法のうちのいずれか1つもしくは複数、またはそれらの任意の組合せを行うように構成される1つまたは複数のプロセッサとを含むデバイスによって実施され得る。
[0220] 図8は、ビデオエンコーダ20および/またはビデオデコーダ30が本開示の前の行からのコピーモードを使用してコーディングし得るブロックの別の例を示す概念図である。現在のCU400は、row_0 402とrow_4 404とを含む、ピクセルのいくつかの行を含む。図示のように、row_4 404は、(×でマークされ、参照ピクセル410で開始する)参照ランと呼ばれる、row_0 402の4つの以前コード化されたピクセルに対して、(×でマークされ、ピクセル408で開始する)現在コード化されている4つのピクセルのランを含む。いくつかの例において、現在のCU400をコーディングするために、ビデオエンコーダ20および/またはビデオデコーダ30は、参照ピクセル410で開始するrow_0 402中の参照ランのためのパレットインデックスを、ピクセル408で開始する現在のランの対応するピクセルにコピーし得る。.図8の特定の例において、参照ランと現在のランとの間のマッチングランレングスは4であり、これは、現在のCU400をコーディングするために、ビデオエンコーダ20およびビデオデコーダ30が、4つの連続するパレットインデックスのストリングを参照ランから現在のランにコピーし得ることを意味する。
[0221] 従って、図8の例において、ビデオエンコーダ20およびビデオデコーダ30は、ビデオデータのブロックの第1のピクセルのための第1の複数のパレットインデックス、例えば、row_0 402の4つのマークされたピクセルに関連付けられたインデックスを決定すること得る。さらに、ビデオエンコーダ20およびビデオデコーダ30は、現在のラン(ピクセル408において開始する4つのピクセルのラン)のランレングスがランレングスしきい値を満たすことに基づいて、パレットコーディングモード(例えば、上方からのコピーモード)を有効化し得る。図8に示されている例において、ランレングスしきい値は4であり得、従って、ビデオエンコーダ20およびビデオデコーダ30は、現在のランについてパレットコーディングモードを使用し得るが、比較的より短いランについてパレットコーディングモードを無効化し得る。ビデオエンコーダ20およびビデオデコーダ30は、パレットコーディングモードを使用して第1の複数のパレットインデックスに対して現在のランをコーディングし得る。
[0222] 図9は、ビデオ復号デバイスが本開示の1つまたは複数のパレットベース復号技法を行い得る例示的なプロセス420を示すフローチャートである。プロセス420は本開示の態様による様々なデバイスによって行われ得るが、プロセス420は、説明を容易にするために、ここでは図1および図3のビデオデコーダ30に関して説明される。
[0223] 図9の例において、ビデオデコーダ30は、パレットコード化ブロックのためのパレットを決定する(422)。様々な例において、ビデオデコーダ30は、ビットストリーム中で受信されるパレット符号化ブロックのためのパレットを独立して決定するか、別のパレットコード化ブロックからパレットをコピーするか、またはビットストリーム中でパレット自体を受信し得る。
[0224] さらに、ビデオデコーダ30は、パレットコード化ブロック内で参照ランのためのパレットインデックスを決定し得る(424)。例えば、ビデオデコーダ30は、最初の連続する一連のピクセルのためのパレットインデックスを再構成し得、これらは、今度は、1つまたは複数の後続の一連のピクセルのための参照ピクセルのランとして働き得る。
[0225] ビデオデコーダ30は、現在のランのランレングスに基づいて特定のパレットコーディングモードを有効化し得る(426)。例えば、ランレングスがしきい値ランレングスを満たす(例えば、それよりも大きくそれに等しい)場合、ビデオデコーダ30は、現在のランに関して前の行からのコピーモードを有効化し得る。ビデオデコーダ30は、有効化されたパレットコーディングモードを使用して現在のランのピクセルを復号し得る(428)。例えば、有効化されたモードが前の行からのコピーモードである場合、ビデオデコーダ30は、図6に示されたプロセス320に従って現在のランを復号し得る。
[0226] このようにして、様々な例において、本開示は、ビデオデータを復号する方法を対象とし、本方法は、ビデオデータのブロックを復号するためのパレットを決定することと、ここで、パレットが、それぞれのパレットインデックスをそれぞれ有する1つまたは複数のパレットエントリを含む、ビデオデータのブロックの第1のピクセルのための第1の複数のパレットインデックスを決定することと、第1の複数のパレットインデックスに対して復号されているビデオデータのブロックの第2のピクセルのための第2の複数のパレットインデックスのランのランレングスがランレングスしきい値を満たすことに基づいて、パレットコーディングモードを有効化することと、パレットコーディングモードを使用して第1の複数のパレットインデックスに対して第2の複数のパレットインデックスのランを復号することとを含む。いくつかの例では、本方法は、ランレングスとランレングスしきい値との間の差分を決定することと、ランのランレングスを決定するために差分をランレングスしきい値に加算することとをさらに含み得る。1つのそのような例において、差分を決定することは、符号化ビデオビットストリームから差分を表す1つまたは複数のシンタックス要素を復号することを含む。別のそのような例において、ランレングスしきい値は、符号化ビットストリーム中でシンタックス要素によって示されない一定のランレングスしきい値を含む。
[0227] いくつかの例示的な実施形態によれば、本方法は、参照行オフセットと第2の複数のパレットインデックスの開始パレットインデックスとに基づいてルックアップテーブルを使用してランレングスしきい値を決定することをさらに含む。いくつかの例では、パレットコーディングモードを使用して第1の複数のパレットインデックスに対して第2の複数のパレットインデックスのランを復号することは、第1の複数のパレットインデックスを第2の複数のパレットインデックスとしてコピーすることを含む。
[0228] いくつかの例において、本方法は、参照行オフセットと第2の複数のパレットインデックスの開始パレットインデックスとの各々に関連付けられたバイナリ化ビットのそれぞれの数に基づいてランレングスしきい値を取得することをさらに含む。1つのそのような例によれば、参照行オフセットと第2の複数のパレットインデックスの開始パレットインデックスとの各々に関連付けられたバイナリ化ビットのそれぞれの数に基づいてランレングスしきい値を取得することは、参照行オフセットと第2の複数のパレットインデックスの開始パレットインデックスとの各々に関連付けられたそれぞれのバイナリ化ビットの商に所定の一定値を加算することによってランレングスしきい値を計算することを含む。
[0229] いくつかの例によれば、パレットモードは前の行からのコピーモードである。1つのそのような例において、前の行からのコピーモードを使用して第2の複数のパレットインデックスに対して第1の複数のパレットインデックスを復号することは、第1の複数のパレットインデックス中に含まれる参照インデックスを位置特定することと、ここで、参照インデックスが、第2の複数のパレットインデックスの最初のインデックスから少なくとも1つのライン離間する、第1の複数のインデックスのランのランレングスを決定することと、ここで、ランの最後のインデックスが、ブロック中で第2の複数のパレットインデックスの最初のインデックスから少なくとも1つのインデックスだけ離れる、ラン中に含まれる第1の複数のインデックスを第2の複数のパレットインデックスとしてコピーすることとを含む。いくつかの例において、本方法は、第2の複数のパレットインデックスに関連するパレットベースコーディングモードを示すデータを受信することと、0の値を示す受信されたデータに基づいて、パレットベースコーディングモードが上方からのコピーモードまたは前の行からのコピーモードのうちの1つを含むと決定することとをさらに含む。
[0230] 様々な例において、本方法はワイヤレス通信デバイス上で実行可能であり、本デバイスは、ビデオデータを記憶するように構成されるメモリと、メモリに記憶されたビデオデータを処理するための命令を実行するように構成されるプロセッサと、ビデオデータのブロックを受信するように構成される受信機とを含む。いくつかの例において、ワイヤレス通信デバイスはセルラー電話であり、復号されるべきビデオデータのブロックは受信機によって受信され、セルラー通信規格に従って変調される。本明細書で説明する復号技法は、様々な例において、実行されたとき、ビデオ復号デバイスの1つまたは複数のプロセッサに、本技法のうちのいずれか1つもしくは複数、またはそれらの任意の組合せを行わせる命令で符号化されたコンピュータ可読記憶媒体またはコンピュータ可読記憶デバイスによって実施され得る。本明細書で説明する復号技法は、様々な例において、符号化ビデオデータを記憶するように構成されるメモリと、本技法のうちのいずれか1つもしくは複数、またはそれらの任意の組合せを行うように構成される1つまたは複数のプロセッサとを含むデバイスによって実施され得る。
[0231] 図10は、ビデオ符号化デバイスが本開示の1つまたは複数のパレットベース復号技法を行い得る例示的なプロセス440を示すフローチャートである。プロセス440は本開示の態様による様々なデバイスによって行われ得るが、プロセス440は、説明を容易にするために、ここでは図1および図2のビデオエンコーダ20に関して説明される。
[0232] 図10の例において、ビデオエンコーダ20は、パレットコード化ブロックのためのパレットを決定する(442)。様々な例において、ビデオエンコーダ20は、パレット符号化ブロックのためのパレットを独立して決定するか、別のパレットコード化ブロックからパレットをコピーするか、またはパレットベースコーディングの様々な他の技法従ってパレットを決定し得る。
[0233] さらに、ビデオエンコーダ20は、パレットコード化ブロック内で参照ランのためのパレットインデックスを決定し得る(444)。例えば、ビデオエンコーダ20は、最初の連続する一連のピクセルのためのパレットインデックスを符号化し得、これらは、今度は、1つまたは複数の後続の一連のピクセルのための参照ピクセルのランとして働き得る。
[0234] ビデオエンコーダ20は、現在のランのランレングスに基づいて特定のパレットコーディングモードを有効化し得る(446)。例えば、ランレングスがしきい値ランレングスを満たす(例えば、それよりも大きくそれに等しい)場合、ビデオエンコーダ20は、現在のランに関して前の行からのコピーモードを有効化し得る。ビデオエンコーダ20は、有効化されたパレットコーディングモードを使用して現在のランのピクセルを符号化し得る(448)。例えば、有効化されたモードが前の行からのコピーモードである場合、ビデオエンコーダ20は、図7に示されたプロセス350に従って現在のランを符号化し得る。
[0235] このようにして、様々な例において、本開示は、ビデオデータを符号化する方法を対象とし、本方法は、ビデオデータのブロックを復号するためのパレットを決定することと、ここで、パレットが、それぞれのパレットインデックスをそれぞれ有する1つまたは複数のパレットエントリを含む、ビデオデータのブロックの第1のピクセルのための第1の複数のパレットインデックスを決定することと、第1の複数のパレットインデックスに対して符号化されているビデオデータのブロックの第2のピクセルのための第2の複数のパレットインデックスのランのランレングスがランレングスしきい値を満たすことに基づいて、パレットコーディングモードを有効化することと、パレットコーディングモードを使用して第1の複数のパレットインデックスに対して第2の複数のパレットインデックスのランを符号化することとを含む。いくつかの例において、本方法は、ランレングスとランレングスしきい値との間の差分を決定することと、符号化ビデオビットストリーム中で差分を表すシンタックス要素をシグナリングすることとをさらに含む。
[0236] いくつかの例において、ランレングスしきい値は、符号化ビットストリーム中でシンタックス要素によって示されない一定のランレングスしきい値を含む。いくつかの例示的な実施形態によれば、本方法は、参照行オフセットと第2の複数のパレットインデックスの開始パレットインデックスとに基づいてルックアップテーブルを使用してランレングスしきい値を決定することを含む。いくつかの例において、パレットコーディングモードを使用して第1の複数のパレットインデックスに対して第2の複数のパレットインデックスのランを符号化することは、第1の複数のパレットインデックスを第2の複数のパレットインデックスとしてコピーすることを含む。
[0237] いくつかの例示的な実施形態によれば、本方法は、参照行オフセットと第2の複数のパレットインデックスの開始パレットインデックスとの各々に関連付けられたバイナリ化ビットのそれぞれの数に基づいてランレングスしきい値を取得することをさらに含む。1つのそのような実施形態において、参照行オフセットと第2の複数のパレットインデックスの開始パレットインデックスとの各々に関連付けられたバイナリ化ビットのそれぞれの数に基づいてランレングスしきい値を取得することは、参照行オフセットと第2の複数のパレットインデックスの開始パレットインデックスとの各々に関連付けられたそれぞれのバイナリ化ビットの商に所定の一定値を加算することによってランレングスしきい値を計算することを含む。
[0238] いくつかの事例において、本方法は、符号化ビデオビットストリーム中でランレングスしきい値をシグナリングすることをさらに含む。いくつかの例によれば、パレットモードは前の行からのコピーモードである。1つのそのような例において、前の行からのコピーモードを使用して第2の複数のパレットインデックスに対して第1の複数のパレットインデックスを符号化することは、第1の複数のパレットインデックス中に含まれる参照インデックスを位置特定することと、ここで、参照インデックスが、第2の複数のパレットインデックスの最初のインデックスから少なくとも1つのライン離間する、第1の複数のインデックスのランのランレングスを決定することと、ここで、ランの最後のインデックスが、ブロック中で第2の複数のパレットインデックスの最初のインデックスから少なくとも1つのインデックスだけ離れる、ラン中に含まれる第1の複数のインデックスを第2の複数のパレットインデックスとしてコピーすることと、パレットを使用して、コピーされた第2の複数のパレットインデックスに関連するブロックの複数のピクセルを符号化することとを含む。いくつかの例において、本方法は、第2の複数のパレットインデックスのためのパレットベースコーディングモードが上方からのコピーモードまたは前の行からのコピーモードのうちの1つを含むと決定することと、パレットベースコーディングモードが上方からのコピーモードまたは前の行からのコピーモードのうちの1つを含むと決定したことに基づいて、0の値を有するようにパレットコーディングモードを示すデータを符号化することとをさらに含む。
[0239] 本開示のいくつかの態様について、説明のために開発中のHEVC規格に関して説明した。但し、本開示で説明する技法は、他の規格またはまだ開発されていないプロプライエタリなビデオコーディング処理を含む、他のビデオコーディング処理にとって有用であり得る。
[0240] 上記で説明した技法は、ビデオエンコーダ20(図1および図2)および/またはビデオデコーダ30(図1および図3)によって行われ得、ビデオエンコーダ20とビデオデコーダ30の両方はビデオコーダと総称され得る。同様に、ビデオコーディングは、適用な可能なとき、ビデオ符号化またはビデオ復号を指し得る。さらに、ビデオ符号化およびビデオ復号は、ビデオデータを「処理すること」と総称され得る。
[0241] 本明細書で説明した技法の全ては、個々にまたは組合せで使用され得ることを理解されたい。本開示は、ブロックサイズ、パレットサイズ、スライスタイプなど、いくつかのファクタに応じて変化し得るいくつかのシグナリング方法を含む。シンタックス要素をシグナリングまたは推論することにおけるそのような変形形態は、エンコーダおよびデコーダにアプリオリに知られ得るか、またはタイルレベルでもしくは他の場所で、ビデオパラメータセット(VPS)、シーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、スライスヘッダ中で明示的にシグナリングされ得る。
[0242] 例によっては、本明細書で説明した技法のうちのいずれかの、いくつかの動作またはイベントは、異なる順序で行われ得、追加、マージ、または完全に除外され得る(例えば、全ての説明した動作またはイベントが、本技法の実施のために必要であるとは限らない)ことを認識されたい。その上、いくつかの例において、動作またはイベントは、連続的にではなく、例えば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して同時に行われ得る。
[0243] 1つまたは複数の例において、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれの任意の組合せで実施され得る。ソフトウェアで実施される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含み得るか、または、例えば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明した技法の実施のための命令、コードおよび/またはデータ構造を取り出すために、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
[0244] 限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMもしくは他の光ディスクストレージ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る任意の他の媒体を備えることができる。また、いかなる接続もコンピュータ可読媒体と適切に呼ばれる。例えば、命令が、ウェブサイト、サーバ、または他のリモートソースから、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。但し、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−rayディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲に含まれるべきである。
[0245] 命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価な集積回路もしくはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。従って、本明細書で使用する「プロセッサ」という用語は、上記の構造または本明細書で説明した技法の実施に好適な任意の他の構造のいずれかを指し得る。さらに、いくつかの態様において、本明細書で説明した機能は、符号化および復号のために構成されるか、または複合コーデックに組み込まれる、専用ハードウェアおよび/またはソフトウェアモジュール内で提供され得る。また、本技法は、1つまたは複数の回路または論理要素において完全に実施され得る。
[0246] 本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(例えば、チップセット)を含む、多種多様なデバイスまたは装置において実施され得る。本開示において、様々な構成要素、モジュール、またはユニットについて、開示する技法を行うように構成されるデバイスの機能的態様を強調するように説明したが、異なるハードウェアユニットによる実現を必ずしも必要としない。むしろ、上記で説明したように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わされるか、または相互動作するハードウェアユニットの集合によって提供され得る。
[0247] 様々な例について説明した。これらおよび他の例は以下の特許請求の範囲内にある。