[0022]本開示は、ビデオコーディングおよび圧縮のための技法を説明する。特に、本開示は、ビデオコンテンツ、特にパレットベースのコーディングを用いるスクリーンコンテンツのコーディングをサポートするための技法を説明する。本開示は、パレットベースのコーディングの複数の技術的態様を説明する。いくつかの例では、本開示は、パレットコード化ブロックのピクセルのためのループ内フィルタ処理(たとえば、デブロッキングフィルタ処理および/またはサンプル適応オフセット(SAO:sample adaptive offset)フィルタ処理)の設計および適用を決定するための技法を説明する。より詳細には、ビデオエンコーダまたはビデオデコーダにおける少なくとも1つのパレットコード化ブロックによって形成されるブロック境界に沿ったピクセルのためのデブロッキングフィルタ処理の適用を決定するための技法が説明される。他の例では、本開示は、ビデオエンコーダまたはビデオデコーダにおけるパレットコード化ブロックのエスケープピクセル値を量子化するために使用される量子化パラメータ(QP)値およびデルタQP値を決定するための技法を説明する。
[0023]従来のビデオコーディングでは、画像は、色調が連続的であり(be continuous-tone)空間的に滑らかであると仮定される。これらの仮定に基づいて、ブロックベースの変換、フィルタ処理などのような様々なツールが開発されており、そのようなツールは、自然のコンテンツのビデオに対しては良好な性能を示している。ただし、リモートデスクトップ、協調作業(collaborative work)、およびワイヤレスディスプレイのような用途では、コンピュータにより生成されたスクリーンコンテンツ(たとえば、テキストまたはコンピュータグラフィックスのような)は、圧縮されるべき主要なコンテンツであり得る。このタイプのコンテンツは、不連続な色調を有し、鋭利な線と高コントラストのオブジェクト境界とを特徴とする傾向がある。連続的な色調および滑らかさという仮定はもはやスクリーンコンテンツに対しては当てはまらないことがあるので、従来のビデオコーディング技法は、スクリーンコンテンツを含むビデオデータを圧縮するための効率的な方法ではないことがある。
[0024]本開示は、スクリーンにより生成されたコンテンツのコーディングに特に好適であり得る、パレットベースのコーディングを説明する。たとえば、ビデオデータの特定のエリアが比較的少数の色を有すると仮定すると、ビデオコーダ(たとえば、ビデオエンコーダまたはビデオデコーダ)が、特定のエリアのビデオデータを表すためのいわゆる「パレット」を形成し得る。パレットは、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色のテーブルとして表され得る。たとえば、パレットは、所与のブロック中の最も支配的な色(たとえば、ピクセル値)を含み得る。いくつかの場合、最も支配的な色は、ブロック内で最も頻繁に現れる1つまたは複数の色を含み得る。さらに、いくつかの場合、ビデオコーダが、ある色がブロック中の最も支配的な色のうちの1つとして含まれるべきかどうかを決定するために、しきい値を適用し得る。パレットは、明示的に符号化されてビデオデコーダに送られるか、前のパレットエントリから予測されるか、またはそれらの組合せであり得る。パレットベースのコーディングの様々な態様によれば、ビデオコーダは、現在のブロックについて実際のピクセル値またはそれらの残差をコーディングする代わりに、現在のブロックのピクセルのうちの1つまたは複数を示すインデックス値をコーディングし得る。パレットベースのコーディングのコンテキストにおいて、インデックス値は、現在のブロックの個々のピクセルの色を表すのに使われる、パレット中のそれぞれのエントリを示す。
[0025]たとえば、ビデオエンコーダは、ブロックのためのパレットを決定することと、ブロックのピクセルのうちの1つまたは複数のピクセルの色を表すためにパレット中のエントリの位置を特定すること(locating)と、パレット中のエントリを示すインデックス値をもつブロックを符号化することと、によってビデオデータのブロックを符号化し得る。パレット中のエントリに対してマッピングする色値をもつブロックのそれらのピクセルに対して、ビデオエンコーダは、それぞれのピクセルに対するエントリのインデックス値を符号化し得る。パレット中のエントリに対してマッピングしない色値をもつブロックのそれらのピクセルに対して、ビデオエンコーダは、ピクセルに対する特別なインデックスを符号化し得、実際のピクセル値またはその残差値(またはそれらの量子化されたバージョン)を符号化し得る。これらのピクセルは、「エスケープピクセル」と呼ばれる。いくつかの例では、パレットは、色値がないことを表すゼロエントリを含み得る。この例では、ブロックのすべてのピクセルは、パレット中のエントリにマッピングしない色値を有し、したがって、エスケープピクセルとして符号化される。
[0026]いくつかの例では、ビデオエンコーダは、符号化ビットストリーム中でパレットと、インデックス値と、任意のエスケープピクセルと、をシグナリングし得る。次に、ビデオデコーダは、符号化されたビットストリームから、ブロックのためのパレット、ならびにブロックのピクセルの任意のインデックス値とブロックの任意のエスケープピクセルのピクセル値とを取得し得る。ビデオデコーダは、ブロックのピクセル値を再構築するために、インデックス値をパレットのエントリにマッピングして、エスケープピクセルを復号し得る。上の例は、パレットベースのコーディングの全般的な説明を与えることが意図されている。
[0027]ビデオデータのパレットベースのコーディングのための技法は、インター予測コーディングまたはイントラ予測コーディングのための技法のような、1つまたは複数の他のコーディング技法とともに使用され得る。たとえば、下でより詳細に説明されるように、ビデオエンコーダもしくはビデオデコーダ、または複合エンコーダ−デコーダ(コーデック)は、インター予測コーディングおよびイントラ予測コーディングと、さらにはパレットベースのコーディングとを実行するように構成され得る。
[0028]いくつかの例では、パレットベースのコーディング技法は、1つまたは複数のビデオコーディング規格とともに使用するために構成され得る。たとえば、高効率ビデオコーディング(HEVC)は、ITU−T Video Coding Experts Group(VCEG)およびISO/IEC Motion Picture Experts Group(MPEG)のJoint Collaboration Team on Video Coding(JCT−VC)によって開発されたビデオコーディング規格である。以下「HEVCバージョン1」と呼ぶ確定されたHEVC規格は、「ITU−T H.265、SERIES H:AUDIOVISUAL AND MULTIMEDIA SYSTEMS Infrastructure of audiovisual services−Coding of moving video−High efficiency video coding」、国際電気通信連合(ITU)の電気通信標準化部門、2013年4月として公開されており、http://www.itu.int/rec/T−REC−H.265−201304−Iから入手可能である。
[0029]HEVCに対する機能拡張(Range Extensions)、すなわち、HEVC−Rextが、JCT−VCによって開発されている。以下「RExt WD7」と呼ぶ、機能拡張の最近のワーキングドラフト(WD)が、http://phenix.int−evry.fr/jct/doc_end_user/documents/17_Valencia/wg11/JCTVC−Q1005−v4.zipから入手可能である。JCT−VCはまた、HEVC−Rextに基づく、HEVCスクリーンコンテンツコーディング(SCC:Screen Content Coding)を開発している。以下、SCC WD1.0と呼ぶ、HEVC SCC拡張の最近のWDが、http://phenix.int−evry.fr/jct/doc_end_user/documents/18_Sapporo/wg11/JCTVC−R1005−v3.zipから入手可能である。以下、SCC WD2.0と呼ぶ、HEVC SCC拡張のより最近のWDが、http://phenix.int−evry.fr/jct/doc_end_user/documents/19_Strasbourg/wg11/JCTVC−S1005−v1.zipから入手可能である。
[0030]HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。したがって、CUモードのコンテキストにおいて説明される以下の開示されるプロセスのすべてが、追加で、または代替的に、PUに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースのコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として機能するように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形のブロック、長方形のブロック、または非長方形の領域であってもよい。
[0031]パレットベースのコーディングの基本的な考えは、CUごとに、現在のCU中の最も支配的な色(すなわち、ピクセル値)を含む、または場合によっては色を含まないパレットが導出されるというものである。パレットのパレットサイズおよびパレットエントリは、ビデオエンコーダからビデオデコーダに送信され得る。パレットのパレットサイズおよびパレットエントリは、1つまたは複数の隣接CU(たとえば、上および/または左のコード化CU)のためのパレットのサイズおよびエントリをそれぞれ使用して直接コーディングされるか、または予測コーディングされ得る。次いで、CUのピクセルは、一定の走査順序に従ってパレットに基づいて符号化され得る。
[0032]CU中のピクセルロケーションごとに、ピクセルの色がパレット中に含まれるかどうかを示すためにフラグが送信され得る。パレット中のエントリにマッピングするピクセルについて、そのエントリに関連するパレットインデックスが、CU中の所与のピクセルロケーションのためにシグナリングされ得る。場合によっては、ランモードコーディング(run mode coding)は、CU中のピクセルロケーションに関連するパレットインデックスがシグナリングされ、その後にピクセル値の「ラン(run)」が続くように使用され得る。この場合、フラグもパレットインデックスも、「ラン」によって包含される後続のピクセルロケーションについて送信される必要はなく、というのは、それらがすべて同じピクセル値を有するからである。パレット中のエントリにマッピングしない色値をもつそれらのピクセル(すなわち、エスケープピクセル)について、特別なインデックスがピクセルに割り当てられ得、実際のピクセル値またはそれの残差値(またはそれらの量子化されたバージョン)が、CU中の所与のピクセルロケーションのために送信され得る。エスケープピクセル値は、スライスレベルの量子化パラメータ(QP)値または係数QP値に従って量子化され得る。エスケープピクセルは、固定長コーディング、単項コーディング(unary coding)など、任意の既存のエントロピーコーディング法を使ってコーディングされ得る。
[0033]パレットベースのコーディングの複数の異なる技術的態様が、パレットベースのコーディングモードを示すことと、所与のブロックのためのパレットを決定することと、所与のブロックのピクセル値を示すために使用されるパレットインデックス値を送信することと、パレットおよびパレットインデックス値のロッシーなコーディング(lossy coding)とを含め、以下でより詳細に説明される。
[0034]たとえば、現在のCU(または、他の例では、PU)のためにパレットベースのコーディングモードが使用されるべきであるかどうかを示すためにフラグ「PLT_Mode_flag」または「palette_mode_flag」などのシンタックス要素が送信され得る。一例では、シンタックス要素palette_mode_flagの値は、現在のCUがパレットベースのコーディングモードを使用して符号化されること、または現在のCUがパレットベースのコーディングモード以外のモードを使用して符号化されることを指定し得る。たとえば、現在のCUを復号するために、様々なインター予測コーディングモード、イントラ予測コーディングモード、または他のコーディングモードのいずれかが使用され得る。例として、palette_mode_flagの使用が説明される。他の例では、CU(または、他の例では、PU)のためにパレットベースのコーディングモード、インター予測のコーディングモード、イントラ予測子のコーディングモード、または別のコーディングモードが使用されるべきであるのかを示すために、マルチビットコードなどの他のシンタックス要素が使用され得る。
[0035]いくつかの例では、パレットベースのコーディングモードを示すシンタックス要素が、符号化ビットストリームにおいてCUレベルでシグナリングされ、次いで、符号化されたビットストリームを復号するときにビデオデコーダによって受信され得る。他の例では、シンタックス要素は、CUレベルよりも高いレベルで送信され得る。たとえば、スライス中のCUのすべてがパレットベースのコーディングモードを使用して符号化されるべきであるかどうかを示すために、パレットベースのコーディングモードを示すフラグがスライスレベルで送信され得る。他の例では、パレットベースのコーディングモードを示すフラグが、ピクチャパラメータセット(PPS)レベル、シーケンスパラメータセット(SPS)レベルまたはビデオパラメータセット(VPS)レベルでシグナリングされ得る。
[0036]追加の例では、パレットベースのコーディングモードが特定のビデオシーケンス、ピクチャまたはスライスのために有効化されるかどうかを指定するシンタックス要素が、より高いレベルのうちの1つ、たとえば、SPSレベル、VPSレベル、PPSレベルまたはスライスレベルで送信され得、一方、palette_mode_flagが、パレットベースのコーディングモードが各CUのために使用されるかどうかを示す。一例では、SPSレベル、VPSレベル、PPSレベル、またはスライスレベルで送られるフラグまたは他のシンタックス要素が、パレットベースのコーディングモードが無効化されることを示す場合、CUごとにpalette_mode_flagを付加的にシグナリングする必要がなくなり得る。やはり、上述のように、現在のCUのためのパレットベースのコーディングモードを示すためのこれらの技法の適用は、追加または代替として、PUのためのパレットベースのコーディングモードを示すために使用され得る。
[0037]パレットベースのコーディングモードを示すシンタックス要素またはフラグは、同じくまたは代替的に、サイド情報に基づいて条件付きで送信または推論され得る。シンタックス要素を送信または推論するための条件として使用されるサイド情報は、たとえば、現在のCUのサイズ、フレームタイプ、色空間、色成分、フレームサイズ、フレームレート、スケーラブルビデオコーディングにおけるレイヤIDまたはマルチビューコーディングにおけるビューIDのうちの1つまたは複数であり得る。
[0038]パレットベースの符号化のためにビデオエンコーダによって使用されるパレットは、パレットベースの復号のためにビデオデコーダが使用するために符号化されたビットストリーム中でビデオエンコーダによって送信され得る。パレットは、CUごとに送信されるか、または、場合によっては、異なるCUの間で共有され得る。一例では、パレットは、現在のCUの色成分ごとに別個に送信され得る。たとえば、現在のCUのルーマ(Y)成分のためのパレットと、現在のCUの第1のクロマ(U)成分のための別のパレットと、現在のCUの第2のクロマ(V)成分のためのまた別のパレットとがあり得る。Y成分のためのパレットでは、パレット中の各エントリは、現在のCU中の代表的なルーマ値であり得る。U成分およびV成分のためのそれぞれのパレットの各々では、パレット中の各エントリは、現在のCU中の代表的なクロマ値であり得る。別の例では、現在のCUの色成分のすべてのために単一のパレットが送信され得る。この例では、パレット中のi番目のエントリが、色成分の各々の値を示す三つ組(a triple)(Yi,Ui,Vi)として表され得る。また別の例では、現在のCUのY成分のためにルーマパレットが送信され得、一方、現在のCUのU成分およびV成分のためにクロマパレットが送信され得る。
[0039]パレットのサイズは、たとえば、含まれる色値の数の単位として、固定値であり得るか、または符号化されたビットストリーム中でエンコーダによってシグナリングされ得る。現在のCUの異なる色成分ごとに別個のパレットが定義される場合、パレットのサイズは、異なる色成分の各々のために別個にシグナリングされ得るか、または色成分のすべてのために単一のサイズがシグナリングされ得る。パレットのサイズを示すように定義されたシンタックス要素は、単項コード、(たとえば、パレットサイズの最大限度で切り捨てられる)切捨て単項コード、指数ゴロム、またはライス−ゴロムコード(Rice-Golomb codes)を使用してコーディングされ得る。いくつかの例では、パレットのサイズは、パレットのエントリをシグナリングした後に「停止」フラグをシグナリングすることによって示され得る。パレットのサイズは、サイド情報に基づいて条件付きで送信または推論され得る。
[0040]いくつかの例では、CUごとに、現在のCUのためのパレットが予測されるか、または明示的に送信されるかを示すためにフラグが送信され得る。フラグは、異なる色成分の各々のために別個に送信され得る(たとえば、3つのフラグが、YUV色成分の各々のために送信され得る)か、または色成分のすべてのために単一のフラグが送信され得る。いくつかの例では、現在のCUのパレットは、1つまたは複数の前にコーディングされた隣接CUの予測子パレットからエントリの一部または全部をコピーすることによって予測され得る。たとえば、予測子パレットは、左側の隣接CUまたは上側の隣接CUのパレットであり得る。予測子パレットはまた、2つ以上の隣接CUのパレットの組合せであり得る。たとえば、複数の隣接CUのうちの2つ以上のパレットに基づいて予測子パレットを生成するために、1つまたは複数の公式、関数、ルールなどが適用され得る。候補リストが構築され得ること、および現在のCUのパレットが少なくとも部分的にコピーされるべきである1つまたは複数の候補CUを示すために1つまたは複数のインデックスが送信され得ることも可能である。
[0041]いくつかの例では、現在のCUのパレットは、エントリごとに(on an entry-wise basis)予測され得る。一例では、現在のCUのパレット中のエントリごとに、それぞれのエントリが、たとえば、選択された隣接CUあるいは1つまたは複数の隣接CUの組合せの予測子パレット中の対応するエントリからコピーされるべきであるのか、あるいはビデオエンコーダからビデオデコーダに明示的に送信されるべきであるのかを示すためにフラグが送信される。別の例では、選択された隣接CUあるいは1つまたは複数の隣接CUの組合せの予測子パレット中のエントリごとに、それぞれのエントリが現在のCUのパレットにコピーされるべきであるかどうかを示すためにフラグが送信される。予測子パレットとしてパレットが使用される隣接CUまたは2つ以上の隣接CUの組合せから予測子パレットを構築するためのルールが、サイド情報に基づいて条件付きで送信または推論され得る。
[0042]パレットを明示的に送信または予測するその手法の代替は、パレットをオンザフライで(on-the-fly)構築することである。この場合、CUの始めに、パレット中にエントリがなく、エンコーダが、CU中の位置についてピクセルの新しい値をシグナリングするので、これらの値がパレット中に含まれる。すなわち、色値がCU中の位置について生成され、送信されるので、エンコーダはパレットに色値を追加する。次いで、同じ値を有するCU中の後の位置は、エンコーダに色値を明示的に送信させる代わりに、たとえば、インデックス値を用いてパレット中の色値を参照し得る。同様に、デコーダは、CU中の位置について(たとえば、エンコーダによってシグナリングされた)新しい色値を受信するとき、それは、デコーダによって構築されたパレット中に色値を含める。CU中の後の位置が、パレットに追加されている色値を有するとき、デコーダは、CU中のピクセルの再構築のためにパレット中の対応する色値を識別するたとえば、インデックス値などの情報を受信し得る。
[0043]現在のCUのためのパレットが決定されると、CU内の1つまたは複数のピクセルのためのパレット中の色値にマッピングするインデックス値を選択および送信することによって、CUがコーディング(すなわち、符号化または復号)され得る。たとえば、インデックス値マップ中のi番目のエントリは、CU中のi番目の位置に対応し得る。1に等しいインデックス値マップ中のi番目のエントリの値は、CU中のこのi番目のロケーションにおけるピクセルの色値がパレット中の色値のうちの1つであることを指定し得、ビデオデコーダがCUを再構築することができるように、パレット内の色値に対応するパレットインデックスがさらに送信される。パレット中に1つのエントリしかない場合、パレットインデックスの送信はスキップされ得る。0に等しいインデックス値マップ中のi番目のエントリの値は、CU中のi番目の位置におけるピクセルの色値がパレット中に含まれない(すなわち、ピクセルがエスケープピクセルである)ことを指定し得、エスケープピクセルの色値は、ビデオデコーダに明示的に送信される。
[0044]CU中の1つの位置における色値がパレット内の色値である場合、CU中の隣接位置が同じ色値を有する確率が高いことがわかる。この確率を利用するために、CU中の位置のためのパレットインデックス(たとえば、色値sに対応するインデックスj)を符号化した後に、走査が異なる色値に達する前にCU中に含まれる同じ色値sを有する連続するピクセルの数を示すために、「run」シンタックス要素が送信され得る。たとえば、CU中のすぐ次の位置がsとは異なる値を有する場合、run=0が送信される。CU中の次の位置が値sを有するが、その次の位置が値sを有しない場合、run=1が送信される。
[0045]場合によっては、runが明示的に送信されない場合、runの値が位置の定数、たとえば、4、8、16などになることが暗示され得るか、または、runの暗黙値もサイド情報に依存し得る。インデックス値マップが明示的に送信されないいくつかの追加の場合には、runのための開始位置が暗黙的に導出され得る。たとえば、runは、いくつかのロケーション、たとえば、各行の始端(beginning)、N行ごとの始端、走査方向に応じて、またはサイド情報に応じてのみ開始し得る。暗黙的開始位置導出と暗黙的ラン導出とが組み合わされる可能性もある。たとえば、runの値が2つの隣接する開始位置との間の距離に等しくなることが暗示され得る。
[0046]いくつかの例では、インデックス値マップは、線コピーをシグナリングすることによって送信され得る。CU中のピクセルの現在の線がCU内の上または左側のピクセルの前の線と同じ色値を有する場合、ビデオエンコーダは、ピクセルの現在の線のインデックス値が、インデックス値マップ内の上または左側のピクセルの前の線のインデックス値からコピーされるべきであることを示し得る。一例として、インデックス値マップ内の前の4つの線が記憶され得、次いで、現在の線にどの前の線がコピーされるべきかと、その前の線の何個のエントリがコピーされるべきかとがシグナリングされ得る。
[0047]ビデオエンコーダは、パレット中のエントリとCU中のピクセルの実際の色値との間の一致が厳密でないとき、ロスレスにあるいは若干のロスでパレットベースのコーディングを実行し得る。ビデオデコーダは、概して、ビデオエンコーダがロスレスなまたはロッシーなパレットベースのコーディングを実行するのにかかわらず、同じプロセスを適用し得る。ロッシーなパレットベースのコーディングの場合、近い色値をもつ2つ以上のエントリがパレット中で単一の値にマージ(すなわち量子化)され得るように、量子化されたパレットが使用され得る。一例では、新しい色値は、新しい色値とパレット中にすでに含まれている既存の色値の各々との間の絶対差がしきい値よりも大きいかどうかに基づいてパレットに追加され得る。絶対差がしきい値以下である場合、新しい色値は、パレットに追加されないことがあり、代わりに、ドロップされるか、あるいはパレット中に含まれている既存の色値とマージされる。
[0048]同様に、別の例では、符号化されるべき現在のCU内のピクセルの色値が、パレット中のエントリの各々の色値と比較され得る。ピクセルの色値とパレット中のエントリのうちの1つとの間の絶対差がしきい値以下である場合、ピクセル値が、パレット中のエントリのうちの1つに対応するインデックス値として符号化され得る。いくつかの例では、ピクセルを符号化するために、ピクセルの色値との最小絶対差をもたらすパレットエントリが選択され得る。ピクセルの色値とパレット中のエントリのすべてとの間の絶対差がしきい値よりも大きい場合、ピクセルは、パレット中に含まれず、代わりに、明示的に送信される色値を有するエスケープピクセルとして符号化され得る。
[0049]HEVCバージョン1では、ピクチャ再構築の後に、ビデオエンコーダまたはビデオデコーダにおけるデブロッキングフィルタプロセスは、コード化ブロック間に形成される境界におけるアーティファクトを検出し、境界に沿ったピクセルに選択されたデブロッキングフィルタを適用することによってアーティファクトを減衰させるように試みる。ビデオエンコーダまたはビデオデコーダは、ピクチャを8×8ピクセルまたはサンプルのブロックに分割するグリッド上にある4ピクセル長を有するブロック境界ごとに別個にデブロッキングフィルタ処理決定を行い得る。
[0050]図4は、2つの隣接するブロック170、172間に形成される4ピクセル長の垂直ブロック境界174の一例を示す概念図である。説明のために、第1のブロック170は、ブロックPと呼ばれることがあり、第2のブロック172は、ブロックQと呼ばれることがある。図4に示すように、第1のブロック170(P)は、4×4ピクセルを含み、各々がpj,iと標示され、jは、ブロック境界174から順に列(column)番号0、3を示し、iは、第1のブロック170の上から順に行(row)番号0、3を示す。図4にさらに示すように、第2のブロック172(Q)は、4×4ピクセルを含み、各々がqj,iと標示され、jは、ブロック境界174から順に列番号0−3を示し、iは、第2のブロック172の上から順に行番号0−3を示す。
[0051]一例として、第1のブロック170と第2のブロック172とがルーマブロックである場合、ビデオエンコーダまたはビデオデコーダは、(1)ブロック境界174が予測ユニット(PU)境界または変換ユニット(TU)境界である、(2)ブロック境界174の境界強度値が0よりも大きい、および(3)ブロック境界174の両側のピクセルまたはサンプルの変動が指定されたしきい値を下回るという3つの基準が真であることに基づいて、ブロック境界174に沿った第1のブロック170と第2のブロック172との各々中のルーマピクセルにデブロッキングフィルタ処理を適用し得る。以下で説明するいくつかの追加の条件も真である場合、ブロック境界174に沿った第1のブロック170と第2のブロック172との各々中のピクセルに、通常のまたは弱いデブロッキングフィルタの代わりに、強いフィルタが適用され得る。
[0052]ブロック境界174の境界強度値Bsは、以下の表1中に含まれる条件に従って決定され得る。
[0053]ブロック境界174がPU境界またはTU境界であり、境界強度値Bsが正(すなわち、0よりも大きい)場合、デブロッキングフィルタ処理がブロック境界174のために有効化されるかどうかを決定するためにビデオエンコーダまたはビデオデコーダによってさらに使用されるピクセル変動基準は、以下の通りであり、ピクセル値は、図4に示すように示される。
[0054]デブロッキングフィルタ処理が、ブロック境界174のために有効化されることに基づいて、デブロッキングフィルタ処理のタイプ、すなわち、通常のタイプまたは強いタイプを決定するためにビデオエンコーダまたはビデオデコーダによって使用される追加の基準は、以下の通りであり、ピクセル値は、図4に示すように示され、i=0、3である。
[0055]強いデブロッキングフィルタが選択される場合、デブロッキングフィルタは、ブロック境界174の各サイドの3つのルーマピクセル、たとえば、p2,i、p1,i、p0,i、q0,i、q1,i、q2,iに適用され得る。通常のまたは弱いフィルタが選択される場合、デブロッキングフィルタは、ブロック境界174の各サイドの1つまたは2つのルーマピクセル、たとえば、p0,iおよびq0,i、またはp1,i、p0,i、q0,i、q1,iに適用され得る。
[0056]さらに、第1のブロック170と第2のブロック172とがクロマブロックである場合、ビデオエンコーダまたはビデオデコーダは、ブロック境界174の境界強度値が2に等しいことに基づいて、ブロック境界174に沿った第1のブロック170と第2のブロック172との各々中のクロマピクセルにデブロッキングフィルタ処理を適用し得る。デブロッキングフィルタ処理が、ブロック境界174のために有効化されることに基づいて、デブロッキングフィルタは、ブロック境界174の各サイドの1つのクロマピクセル、たとえば、p0,iおよびq0,iに適用され得る。
[0057]水平ブロック境界のためのデブロッキングフィルタ決定は、図4に関して上記で説明した垂直ブロック境界と同様に決定され得る。HEVCにおけるデブロッキングフィルタ処理が、HEVCバージョン1、ならびにA.Norkin、G. Bjontegaard、A.Fuldseth、M.Narroschke、M.Ikeda、K.Andersson、M.Zhou、およびG.V.der Auwera、「HEVC deblocking filter」、IEEE trans.Cirt.&Sys.Video Technol.、Vol.22、no.12、2012年12月により詳細に記載されている。
[0058]HEVCバージョン1では、ピクチャ再構築の後に、ビデオエンコーダまたはビデオデコーダは、SAOフィルタ処理の2つの異なるクラス、すなわち、バンドオフセット(BO)およびエッジオフセット(EO)を適用し得る。一例では、システマティック量子化誤差を補償するために、バンドオフセットフィルタ処理が使用され得る。この例では、ビデオエンコーダまたはビデオデコーダは、ピクセル値をそれらの強度によって分類し、開始バンドを含む連続する4つのバンド中のピクセル値を補正するためにビットストリームにおいて1つの開始バンド位置と4つのオフセット値とをシグナリングし得る。
[0059]別の例では、量子化によるリンギングアーティファクト(ringing artifacts)を補償するために、エッジオフセットフィルタ処理が使用され得る。この例では、ビデオエンコーダまたはビデオデコーダは、現在のコーディングツリーユニット(CTU)中の主要なリンギングアーティファクト方向に基づいて4つの候補(たとえば、水平、垂直、45度の対角線(diagonal)、および135度の対角線)の中から1つのエッジオフセットクラスを選択し得る。エッジオフセットクラスを決定した後に、ビデオエンコーダまたはビデオデコーダは、選択されたエッジオフセットクラスの方向に沿ったネイバーピクセル(neighbor pixels)間の相対強度に基づいてCTU中のピクセルを5つのカテゴリーに分類し得る。5つのカテゴリーのうちの4つは、リンギングアーティファクトを低減するためにオフセットを適用することに関連付けられ得、第5のカテゴリーは、オフセットを適用しないこと、またはエッジオフセットフィルタ処理を無効化することに関連付けられ得る。
[0060]HEVCバージョン1では、ビデオデータのスライス中のブロックを量子化するために、スライスレベルの量子化パラメータ(QP)が使用され得る。ビデオエンコーダまたはビデオデコーダは、現在の量子化グループ中に含まれる所与のブロックを少なくとも3つの異なる方法で量子化または逆量子化するために、スライスレベルのQPを調整し得る。概して、本開示で説明されるQP値は、ルーマパレットQP値と少なくとも1つのクロマパレットQP値とを含み得る。たとえば、QP値は、ルーマ(Y)成分のQPY値と、第1のクロマ(CbまたはU)成分のQPCb値と、第2のクロマ(CrまたはV)成分のQPCr値とを含み得る。
[0061]第1の例として、ビデオエンコーダまたはビデオデコーダは、量子化グループごとに多くて1回シグナリングされる(CuQpDeltaValと呼ばれることがある)デルタQP値によってスライスレベルのQPを調整し得る。各量子化グループは、1つまたは複数のCUを含み得る。デルタQP値は、1に等しいコード化ブロックフラグ(CBF)をもつ第1のTUのためにシグナリングされ得る。CBFは、ルーマ(Y)CBFまたはクロマ(CbまたはCr)CBFのどちらでもあり得る。概して、TUのためのCBFは、量子化され得る少なくとも1つの非ゼロ係数をTUが含むことを示すために、1に等しく設定される。したがって、デルタQP値は、それぞれのTUがTU中に少なくとも1つの量子化係数を含む場合にのみシグナリングされ得る。
[0062]デルタQP値をシグナリングすることは、ビットストリームにおいてCUレベルでデルタQP値の絶対レベルおよび符号をシグナリングすることを含み得る。いくつかの例では、デルタQP値の絶対レベルおよび符号は、デルタQP機構がcu_qp_delta_enabled_flagによってCUのために有効化される場合にシグナリングされ得る。cu_qp_delta_enabled_flagは、デルタQP値の絶対レベルおよび符号がビットストリームにおいてTUレベルでシグナリングされ得るようにデルタQP値がCUのために有効化されるかどうかを示すためにビットストリーム中でSPS、VPS、PPS、またはスライスヘッダのうちの1つ中でシグナリングされ得る。
[0063]スライスレベルのQP値または前の量子化グループ中のブロックに関連する前のQP値であり得る予測されたQP値は、以下の式に従ってデルタQP値によって調整され得る。
上式で、Qp
Yは、変数であり、qP
Y_PREDは、予測されたルーマQP値であり、CuQpDeltaValは、デルタQP値であり、QpBdOffset
Yは、ルーマサンプルのための入力ビット深度に基づくルーマ量子化パラメータ範囲オフセット値である。
[0064]第2の例として、ビデオエンコーダまたはビデオデコーダは、入力ビット深度を変化させることによりスライスレベルのQP値をオフセットするためにQpBdOffset値によってスライスレベルのQPを調整し得る。たとえば、ルーマQP値Qp’
Yは、以下の式に従って決定され得る。
上式で、Qp
Yは、式(5)で決定される変数であり、QpBdOffset
Yは、ルーマサンプルのための入力ビット深度に基づくルーマ量子化パラメータ範囲オフセット値である。入力ビット深度は、Y成分、Cb成分またはCr成分の各々によって異なり得る。以下でより詳細に説明されるように、クロマQP値は、クロマサンプルのための入力ビット深度に基づくクロマ量子化パラメータ範囲オフセット値QpBdOffset
Cに少なくとも部分的に基づいてルーマQP値をさらに調整することによって決定され得る。
[0065]第3の例では、ビデオエンコーダまたはビデオデコーダは、クロマオフセット値に基づいてルーマQP値に対するクロマQP値を決定し得る。クロマオフセット値は、PPSレベルオフセット、たとえば、pps_cb_qp_offsetおよびpps_cr_qp_offsetと、スライスレベルオフセット、たとえば、slice_cb_qp_offsetおよびslice_cr_qp_offsetとを含み得る。クロマオフセット値は、さらに、クロマQPオフセット値、たとえば、CuQpOffsetCbおよびCuQpOffsetCrを含み得る。いくつかの例では、クロマQPオフセット値は、クロマQPオフセット機構がcu_chroma_qp_offset_enabled_flagによってCUのための有効化される場合にシグナリングされ得る。cu_chroma_qp_offset_enabled_flagは、クロマQPオフセット値がビットストリームにおいてTUレベルでシグナリングされ得るようにクロマQPオフセット値がCUのために有効化されるかどうかを示すためにビットストリーム中でSPS、VPS、PPS、またはスライスヘッダのうちの1つ中でシグナリングされ得る。
[0066]たとえば、クロマQP値Qp’
CbおよびQp’
Crは、以下の式に従って決定され得る。
上式で、qPi
CbおよびqPi
Crは、それぞれの変数qP
CbおよびqP
Crを決定するために使用されるインデックスであり、Qp
Yは、式(5)中で決定される変数であり、QpBdOffset
Cは、クロマサンプルのための入力ビット深度に基づくクロマ量子化パラメータ範囲オフセット値である。
[0067]ビデオエンコーダおよびビデオデコーダは、入力クロマフォーマットに依存する非線形調整に基づいて高いQP値(たとえば、30より上)のためのルーマQPに対するクロマQP値を決定し得る。変数Qp
Cを決定するために使用される非線形調整が以下の表2において指定されている。表2において指定されているように、ChromaArrayTypeが1に等しくなる場合、変数qP
CbおよびqP
Crは、インデックスqPiが、それぞれ、qPi
CbおよびqPi
Crに等しくなることに基づいてQp
Cの値に等しく設定される。色成分(すなわち、Y、Cb、Cr)が特定のクロマフォーマット(たとえば、4:2:0)を使用して一緒にコーディングされる場合、変数ChromaArrayTypeが1に等しく設定される。
[0068]ルーマ量子化パラメータ値Qp’Yとクロマ量子化パラメータ値Qp’CbおよびQp’Crとがどのように導出されるかについての完全なプロセスが、HEVCバージョン1により詳細に記載されている。場合によっては、QpY値は、所与のCU中のピクセルへのデブロッキングフィルタ処理の適用を決定するための量子化ステップとして使用され得る。デブロッキングフィルタ処理が、2つの異なるCU中のピクセルに適用される場合、デブロッキングフィルタ処理決定のために、両方のCU中の平均QpYが使用され得る。
[0069]現在のCUが、パレットコード化ブロックとしてコーディングされる場合、HEVCコーディングモードのために設計されたループ内フィルタ処理(たとえば、デブロッキングフィルタ処理および/またはSAOフィルタ処理)プロセスは、パレットベースのコーディングモードを使用してコーディングされるスクリーンコンテンツに良好な結果をもたらさないことがある。従来、パレットコード化ブロックは、インターコード化ブロックと同様に扱われており、したがって、復号されたピクチャバッファ中に記憶されるより前に、フィルタ処理が、再構築されたブロックに自動的に適用された。パレットベースのコーディングモードに関連する信号特性に従ってループ内フィルタ処理プロセスを変更することが望ましいことがある。いくつかの例では、本開示は、パレットコード化ブロックのピクセルのためのループ内フィルタ処理(たとえば、デブロッキングフィルタ処理および/またはSAOフィルタ処理)の設計および適用を決定するための技法を説明する。より詳細には、ビデオエンコーダまたはビデオデコーダにおける少なくとも1つのパレットコード化ブロックによって形成されるブロック境界に沿ったピクセルのためのデブロッキングフィルタ処理の適用を決定するための技法が説明される。
[0070]パレットコード化ブロックのピクセルのためのデブロッキングフィルタ処理の設計および適用を決定することの様々な例が、以下で説明される。以下の例の各々は、(それらが代替例として具体的に提示されない限り)他の例のいずれかと一緒にまたはそれとは別個に使用され得る。以下の例は、図4からの第1のブロック170と、第2のブロック172と、ブロック境界174とに関して説明される。
[0071]開示される技法の一例では、ブロック境界174に隣接する第1のブロック170がパレットコーディングモードを使用してコーディングされる場合、ビデオエンコーダまたはビデオデコーダは、第1のブロック170がロスレスブロック(すなわち、ブロックに変換も量子化も適用されないようにcu_transquant_bypass=1)としてコーディングされた場合と同様の方法でデブロッキングフィルタ処理を適用し得る。言い換えれば、開示される技法は、第2のブロック172とともに形成されるブロック境界174においてパレットコードコーディングされた第1のブロック170内のピクセルのためのデブロッキングフィルタ処理を無効化することによってパレットコーディングされた第1のブロック170をロスレスコーディングされたブロックと同様に扱うことを含む。
[0072]一例として、第1のブロック170と第2のブロック172とがルーマブロックを備える場合、デブロッキングフィルタ処理は、次のように第1のブロック170の再構築されたバージョン内の第1のルーマピクセルのために無効化され得る。ビデオエンコーダまたはビデオデコーダは、最初に、再構築された第1のブロック170と第2のブロック172の再構築されたバージョンとの間に形成されるブロック境界174のためにデブロッキングフィルタ処理が有効化されるかどうかを決定し得る。この決定は、デブロッキングフィルタ処理に関して上記で説明した3つの基準に基づき得る。デブロッキングフィルタ処理がブロック境界174のために有効化されることに基づいて、ビデオエンコーダまたはビデオデコーダは、次いで、デブロッキングフィルタ処理されるべき再構築された第1のブロック170内の第1のルーマピクセルの数を決定し得る。上記で説明されたように、デブロッキングフィルタ処理されるべき第1のルーマピクセルの数は、適用されるべきデブロッキングフィルタ処理の決定されたタイプ、すなわち、通常のタイプまたは強いタイプ、に依存し得る。
[0073]デブロッキングフィルタ処理されるべき第1のルーマピクセルの数が0よりも大きいことに基づいて、および第1のブロック170がパレットコード化ブロックであることに基づいて、ビデオエンコーダまたはビデオデコーダは、再構築された第1のブロック170内の第1のルーマピクセルのためのデブロッキングフィルタ処理を無効化するために、デブロッキングフィルタ処理されるべき第1のルーマピクセルの数を0に等しく設定し得る。これは、開示される技法に従って、ルーマパレットコード化ブロックがデブロッキングフィルタ処理のためにロスレスコード化ブロックと同様に扱われるように、HEVCバージョン1においてロスレスコード化ブロックのルーマサンプルのためにデブロッキングフィルタ処理が無効化される方法と同様である。
[0074]別の例として、第1のブロック170と第2のブロック172とがクロマブロックを備える場合、デブロッキングフィルタ処理は、次のように再構築された第1のブロック170内の第1のクロマピクセルのために無効化され得る。ビデオエンコーダまたはビデオデコーダは、最初に、デブロッキングフィルタ処理がブロック境界174のために有効化されるかどうかを決定し得る。上記で説明されたように、この決定は、ブロック境界174の境界強度値が2に等しくなることに基づき得る。デブロッキングフィルタ処理がブロック境界174のために有効化されることに基づいて、ビデオエンコーダまたはビデオデコーダは、次いで、再構築された第1のブロック170内の第1のクロマピクセルのうちの1つまたは複数のクロマピクセルのデブロッキングフィルタ処理された値を決定し得る。
[0075]第1のブロック170がパレットコード化ブロックであることに基づいて、ビデオエンコーダまたはビデオデコーダは、再構築された第1のブロック170内の第1のクロマピクセルのためのデブロッキングフィルタ処理を無効化するために、第1のクロマピクセルのうちの1つまたは複数のクロマピクセルのデブロッキングフィルタ処理された値を、第1のクロマピクセルのうちの1つまたは複数のクロマピクセルの元の値に等しくなるように設定し得る。これは、開示される技法に従って、クロマパレットコード化ブロックがデブロッキングフィルタ処理のためにロスレスコード化ブロックと同様に扱われるように、HEVCバージョン1においてロスレスコード化ブロックのクロマサンプルのためにデブロッキングフィルタ処理が無効化される方法と同様である。
[0076]開示される技法の別の例では、ブロック境界174に隣接する第1のブロック170と第2のブロック172とがどちらも、パレットコーディングモードを使用してコーディングされる場合、ビデオエンコーダまたはビデオデコーダは、ブロック境界174に沿った第1のブロック170と第2のブロック172との両方中のピクセルのためのデブロッキングフィルタ処理を無効化し得る。いくつかの例では、デブロッキングフィルタ処理は、第1のブロック170中のピクセルのためのデブロッキングフィルタ処理を無効化することに関して上記で説明された方法で第1のブロック170と第2のブロック172との各々のために無効化され得る。他の例では、デブロッキングフィルタ処理は、ブロック境界174の境界強度値を0に等しく設定することによって第1のブロック170と第2のブロック172との各々のために無効化され得る。このようにして、デブロッキングフィルタ処理は、ブロック境界174に沿った第1のブロック170と第2のブロック172との中のルーマピクセルとクロマピクセルとの両方ために無効化される。
[0077]開示される技法のさらなる一例では、第1のブロック170がパレットコーディングモードを使用してコーディングされ、第2のブロック172が、非パレットコーディングモード、たとえば、インターコーディングモードまたはイントラコーディングモードなどを使用してコーディングされる場合、ビデオエンコーダまたはビデオデコーダは、ブロック境界174に沿った第1のブロック170中のピクセルのためにのみデブロッキングフィルタ処理を無効化し得る。この例では、デブロッキングフィルタ処理は、ブロック境界174に沿った第2のブロック172中のピクセルに適用され得る。一例として、ビデオエンコーダまたはビデオデコーダは、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174のためにデブロッキングフィルタ処理が有効化されるかどうかを決定し得る。デブロッキングフィルタ処理がブロック境界174のために有効化されることに基づいて、ビデオエンコーダまたはビデオデコーダは、再構築された第2のブロック172内の第2のピクセルのためのデブロッキングフィルタ処理のタイプを決定し、再構築された第2のブロック172内の第2のピクセルのうちの1つまたは複数にデブロッキングフィルタ処理の決定されたタイプを適用し得る。デブロッキングフィルタ処理は、再構築された第1のブロック170内の第1のピクセルにデブロッキングフィルタ処理を適用することなしに第2の再構築ブロック172内の第2のピクセルに適用され得る。
[0078]開示される技法の別の例では、ブロック境界174に隣接する第1のブロック170がパレットコーディングモードを使用してコーディングされる場合、ビデオエンコーダまたはビデオデコーダは、第2のブロック172をコーディングするために使用されるコーディングモードにかかわらず、ブロック境界174に隣接する第1のブロック170と第2のブロック172との両方内のピクセルのためのデブロッキングフィルタ処理を無効化し得る。たとえば、デブロッキングフィルタ処理は、ブロック境界174のための境界強度値を0に等しく設定することによって無効化され得る。このようにして、デブロッキングフィルタ処理は、ブロック境界174に沿った第1のブロック170と第2のブロック172との中のルーマピクセルとクロマピクセルとの両方のために無効化される。
[0079]開示される技法の追加の例では、ブロック境界174に隣接する第1のブロック170がパレットコーディングモードを使用してコーディングされる場合、ビデオエンコーダまたはビデオデコーダは、パレットコードコーディングされた第1のブロック170のQP値が0に等しく設定されることに基づいて、ブロック境界174の両サイド上のピクセルにデブロッキングフィルタ処理を適用すべきかどうかを決定し得る。
[0080]開示される技法のさらなる一例では、第1のブロック170のみがパレットコーディングモードを使用してコーディングされ、第2のブロック172が非パレットコーディングモードを使用してコーディングされる場合、ビデオエンコーダまたはビデオデコーダは、ブロック境界174のいずれかのサイド上のピクセルのためにデブロッキングフィルタ処理が有効化され得るようにブロック境界174の境界強度値を正値に(すなわち、0よりも大きく)設定し得る。
[0081]この例のある場合には、第1のブロック170が、パレットコーディングモードを使用してコーディングされ、第2のブロック172が、イントラコーディングモードを使用してコーディングされる場合、ブロック境界174の境界強度値は、2に等しく設定され得る。したがって、パレットコーディングモードの場合、上記の表1中のルール1が依然として成り立つ(holds)。この例の別の場合には、第1のブロック170が、パレットコーディングモードを使用してコーディングされ、第2のブロック172が、イントラブロックコピー(IntraBC)コーディングモードを使用してコーディングされる場合、ブロック境界174の境界強度値は、1に等しく設定され得る。代替的に、いくつかの制限が適用され得る。たとえば、IntraBCコーディングされた第2のブロック172に関連する動きベクトルが、しきい値よりも大きい絶対値(たとえば、整数ピクセルの単位で1)を有する場合、境界強度値は、1に等しく設定され得る。そうでない場合、境界強度値は0に等しく設定され得る。
[0082]この例のさらなる場合には、第1のブロック170が、パレットコーディングモードを使用してコーディングされ、第2のブロック172が、インターコーディングモードを使用してコーディングされる場合、ブロック境界174の境界強度値は、1に等しく設定され得る。代替的に、いくつかの制限が適用され得る。たとえば、インターコーディングされた第2のブロック172に関連する動きベクトルが、しきい値よりも大きい絶対値(たとえば、整数ピクセルの単位で1)を有する場合、境界強度値は、1に等しく設定され得る。そうでない場合、境界強度値は0に設定され得る。
[0083]開示される技法の別の例では、第1のブロック170(P)のみが、パレットコーディングモードを使用してコーディングされ、第2のブロック172(Q)が、非パレットコーディングモードを使用してコーディングされる場合、ブロック境界174のためにデブロッキングフィルタ処理が有効化されるかどうかを決定するためにビデオエンコーダまたはビデオデコーダによって使用されるピクセル変動基準は、上記の式(1)から以下の式に変更され得る。
上式で、cは、たとえば、0.5に等しく設定された定数であり、βは、非パレットコーディングされた第2のブロック172(Q)のみのQP値に依存するパラメータである。代替的に、パレットコーディングされた第1のブロック170(P)のQP値が、上記の例のうちの1つの場合のように0に等しく設定されるなど明確に定義されている場合、βは、第1のブロック170と第2のブロック172との両方のQP値に依存し得る。
[0084]同様に、デブロッキングフィルタ処理のタイプ、すなわち、通常のタイプまたは強いタイプを決定するためにビデオエンコーダまたはビデオデコーダによって使用される追加の基準は、上記の式(2)、(3)および(4)からi=0、3をもつ以下の式に変更され得る。
[0085]開示される技法のさらなる一例では、デブロッキングフィルタ処理を設計するために使用されるβおよびtcパラメータを計算するために使用される、パレットベースのコーディングモードのQP値は、次のように定義される。たとえば、第1のブロック170(P)のみが、パレットコーディングモードを使用してコーディングされ、第2のブロック172(Q)が、非パレットコーディングモードを使用してコーディングされる場合、非パレットコーディングされた第2のブロック172(Q)のQP値は、qpQであると仮定され得、パレットコーディングされた第1のブロック170(P)のQP値は、qpP=qpQ+pltQPOffsetとして定義され得る。パラメータpltQPOffsetは、あらかじめ定義された定数であるか、SPS、VPS、PPSまたはスライスヘッダ中でシグナリングされる値であるか、あるいは暗黙的に導出され得る。いくつかの例では、パラメータpltQPOffsetは、デルタQP値であり得る。代替的に、パレットコーディングされた第1のブロック170(P)のQP値、すなわち、qpPはまた、1つまたは複数の他のネイバーブロックのQP値から導出され得る。
[0086]開示される技法の別の例では、少なくとも1つのパレットコード化ブロック、たとえば、第1のブロック170に隣接するブロック境界174においてデブロッキングフィルタ処理が使用されるかどうかを示すために、SPS、VPS、PPS、スライスヘッダ、CTU、またはCU中でフラグがシグナリングされ得る。
[0087]パレットコード化ブロックのためのSAOフィルタ処理の設計および適用を決定することの様々な例が、以下で説明される。以下の例の各々は、(それらが代替例として具体的に提示されない限り)他の例のいずれかと一緒にまたはそれとは別個に使用され得る。
[0088]開示される技法の一例では、CTU中のCUのすべてが、パレットコーディングモードを使用してコーディングされる場合、ビデオエンコーダまたはビデオデコーダ30は、CTU中のCUのすべてのためのSAOフィルタ処理を無効化し得る。
[0089]開示される技法の代替例では、パレットコーディングモードを使用してコーディングされるCTU中のCUの割合がしきい値よりも高い場合、ビデオエンコーダまたはビデオデコーダは、CTU中のCUのすべてのためのSAOフィルタ処理を無効化し得る。CTU中のパレットコーディングされたCUの割合は、CTU中のピクセルの総数に対するパレットコーディングされたピクセルの数(the number of palette coded pixels over the overall number of pixels in the CTU)として、またはCTU中のCUの総数に対するパレットコーディングされたCUの数として、または何らかの他の基準に従って計算され得る。この代替例では、SAOフィルタ処理がCTU中で有効化される場合、パレットコーディングされたCUと非パレットコーディングされたCUとが異なるSAOフィルタパラメータを有し得る可能性がある。たとえば、パレットコーディングされたCUと非パレットコーディングされたCUとが、異なるSAOフィルタタイプ、異なるSAOフィルタクラス、または異なるSAOフィルタオフセットを有し得る。さらに、パレットコーディングされたCUの各々は、異なるSAOフィルタパラメータを有し得る。
[0090]開示される技法の別の例では、パレットコード化ブロックのためのSAOフィルタ処理プロセスは、次のように拡張され得る。ある場合には、パレットコード化ブロック中のエスケープピクセルと非エスケープピクセルとが異なるオフセット値を有し得る。たとえば、SAOフィルタ処理は、エスケープピクセルにのみ適用され得、一方、非エスケープピクセルは、0に等しく設定されたオフセット値を有する。追加の例として、バンドオフセットフィルタ処理のみがエスケープピクセルに適用され得る。いくつかの例では、4つのバンドが、バンドオフセット値によって補正され得る。他の例では、4つより多いかまたは4つより少ないバンドが、バンドオフセット値によって補正され得る。別の場合、スクリーンコンテンツは、一般に、強い水平および垂直パターンを有するので、エッジオフセットフィルタ処理は、水平および垂直方向のみに制限され得る。
[0091]さらなる場合では、色遷移が発生するときにオフセットを決定するために遷移オフセットテーブル、たとえば、{(index,offset_index)}が使用される場合、トランジションエッジオフセットモードが適用され得る。この場合、パレットコーディングモードでの再構築された色インデックスブロックが、ラスタ走査順序でINDEX[x]として示されると仮定され得る。INDEX[x−1]!=INDEX[x]である場合、遷移が、位置[x]において発生し、(この値が遷移オフセットテーブル中に存在する場合)offset_INDEX[x]に等しいオフセットが位置[x]において再構築されたピクセル値に適用される。オフセットは、ラスタ走査順序で後続のピクセルに伝搬し得る。言い換えれば、INDEX[x+k]!=INDEX[x]となるまで、同じオフセットが、位置[x+1],[x+2],...[x+k]においてピクセルに適用される。遷移オフセットテーブルは、パレットインデックスごとに、またはパレットインデックスのサブセットのためにのみシグナリングされ得る。たとえば、遷移オフセットは、コーディングされ、最初の4つのパレットインデックスまでのためにのみビットストリーム中でシグナリングされ得る。特定のインデックスのための遷移オフセットがシグナリングされない場合、デフォルト値、たとえば、0が使用され得る。3つの色成分(たとえば、Y、Cb、Cr)は、同じオフセット値を共有するか、または個別のオフセット値を有し得る。
[0092]現在のCUがパレットコード化ブロックとしてコーディングされる場合、パレットコード化ブロックのエスケープピクセル値を量子化するためにQP値が使用され得る。いくつかの例では、QP値および量子化も、新しいパレットエントリのコーディングに適用され得る。従来、パレットコーディングモードは、CUごと、あるいは1つまたは複数のCUを含み得る量子化グループごとにスライスレベルのQP値を調整するための機構を含まない。したがって、ビデオエンコーダまたはビデオデコーダは、パレットコード化ブロックのエスケープピクセル値を量子化するために一定のQPで動作しなければならない。いくつかの例では、本開示は、パレットコード化ブロックのエスケープピクセル値を量子化するために使用されるQP値およびデルタQP値を決定するための技法を説明する。
[0093]パレットコード化ブロックのパレットQP値を決定または導出することの様々な例が、以下で説明される。以下の例の各々は、(それらが代替例として具体的に提示されない限り)他の例のいずれかと一緒にまたはそれとは別個に使用され得る。
[0094]開示される技法の一例では、ビデオエンコーダまたはビデオデコーダは、予測されたQP値から調整されるパレットコード化ブロックのパレットQP(または対応する量子化ステップサイズ)値を決定し得る。パレットコード化ブロックは、他のパレットコード化ブロックと非パレットコード化ブロックとを含む1つまたは複数の他のブロックを含み得る現在の量子化グループ中に含まれ得る。予測されたQP値は、スライスレベルのQP値または前の量子化グループ中に含まれるブロックに関連付けられるQP値によってメイする。スライスレベルのQP値は、HEVCバージョン1においてスライス内のブロックを量子化するために使用されるQP値である。
[0095]たとえば、パレットコード化ブロックのスライスレベルのQP値を使用する代わりに、ビデオエンコーダまたはビデオデコーダは、パレットコード化ブロックのパレットQP値をスライスレベルのQP+pltQPOffestとして定義し得る。他の例では、パレットQP値は、前の量子化グループ中のブロックに関連するQP値、またはパレットコード化ブロックをも含む現在の量子化グループ中の隣接ブロックに関連するQP値から導出され得る。パラメータpltQPOffsetは、あらかじめ定義された定数であるか、SPS、VPS、PPSまたはスライスヘッダ中でシグナリングされる値であるか、あるいは暗黙的に導出され得る。いくつかの例では、パラメータpltQPOffsetは、デルタQP値であり得る。
[0096]開示される技法の別の例では、ビデオエンコーダまたはビデオデコーダは、パレットコード化ブロックの2つの異なるQP値または対応するオフセットを使用し得る。この例では、第1のpltQPOffset1は、パレットコード化ブロックのための任意の新しいパレットエントリの少なくとも一部分を量子化するために使用され得、第2のpltQPOffset2は、パレットコード化ブロック内のエスケープピクセルの少なくとも一部分を量子化するために使用され得る。pltQPOffset1とpltQPOffset2との各々は、あらかじめ定義された定数であるか、SPS、VPS、PPSまたはスライスヘッダ中でシグナリングされる値であるか、あるいは暗黙的に導出され得る。場合によっては、pltQPOffset値のうちの少なくとも1つは、量子化が使用されない(すなわち、パレットコード化ブロックがロスレスにコーディングされる)ことを示し得る。
[0097]開示される技法のさらなる一例では、ビデオエンコーダまたはビデオデコーダは、パレットコード化ブロックのいくつかの異なるQP値または対応するオフセットを使用し得る。この例では、任意の追加の新しいパレットエントリを量子化するために第2のpltQPOffset2を使用し始めるスイッチポイントをフラグが示すことなどがあるまで、任意の新しいパレットエントリを量子化するために第1のpltQPOffset1が使用され得る。
[0098]開示される技法の追加の例では、インデックス値ごとに、またはパレットコード化ブロック内のピクセルのためにコーディングされたインデックス値のサブセットごとに、異なるQP値または対応するオフセット、すなわち、pltQPOffsetsがシグナリングされるか、またはあらかじめ定義され得る。場合によっては、各異なるパレットランモードでピクセルに異なるpltQPOffsetも使用され得る。たとえば、「左側からコピー」ランモードでのピクセルは「上からコピー」ランモードでのピクセルとは異なるQP値を有し得る。他の場合には、pltQPOffsetもランレングスに依存し得る。
[0099]パレットコード化ブロックのパレットQP値を決定または導出するために使用されるデルタQP値を決定することの様々な例が、以下で説明される。以下の例の各々は、(それらが代替例として具体的に提示されない限り)他の例のいずれかと一緒にまたはそれとは別個に使用され得る。従来、パレットコーディングモードは、CUごと、または量子化グループごとにスライスレベルのQP値を調整するための機構を含まない。上記で説明されたように、非パレットコード化ブロックの場合、関連するCBFが1に等しくなることによって示され得る、非パレットコード化ブロックが少なくとも1つの非ゼロ係数を含む場合、スライスレベルのQP値は、CUごとに、または量子化グループごとに1回シグナリングされるデルタQP値に基づいて調整され得る。
[0100]開示される技法の一例では、ビデオエンコーダまたはビデオデコーダは、パレットコード化ブロックのためのパレット中に含まれない色値を有するエスケープピクセルとしてパレットコード化ブロック内の少なくとも1つのピクセルがコーディングされるかどうかを決定し、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとしてコーディングされることに基づいて、パレットコード化ブロックを含む現在の量子化グループのデルタQP値を決定し得る。ビデオエンコーダまたはビデオデコーダは、次いで、パレットコード化ブロックのパレットQP値を決定するためにデルタQP値に基づいて予測されたQP値を調整し得る。パレットコード化ブロックは、現在の量子化グループ中に含まれ得る。予測されたQP値は、スライスレベルのQP値または前の量子化グループ中に含まれるブロックに関連付けられるQP値によってメイする。
[0101]たとえば、(CuQpDeltaValと呼ばれることがある)デルタQP値は、エスケープピクセル値としてコーディングされる少なくとも1つのピクセルを現在のCUが含むかどうかを示すCUレベルのエスケープフラグの値に応じてシグナリングされ得る。このCUレベルのエスケープフラグ、すなわち、palette_escape_val_present_flagの一例が、2014年5月22日に出願された米国仮出願第62/002,054号の利益を主張する、2015年5月21日に出願された米国特許出願第14/719,215号に記載されている。現在のCUが少なくとも1つのエスケープフラグを含むことをCUレベルのエスケープフラグが示す場合、デルタQP値は、CUレベルのエスケープフラグの直後にビットストリームにおいてCUレベルでシグナリングされ得る。別の例として、パレットコーディングモードを使用してコーディングされたCU内のピクセルのために少なくとも1つのエスケープフラグが存在する場合、デルタQP値がシグナリングされ得る。デルタQP値は、第1のエスケープフラグがシグナリングされた直後に、またはCUの最後にシグナリングされ得る。デルタQP値をシグナリングすることは、デルタQP値の絶対レベルおよび符号をシグナリングすることを含み得る。
[0102]上記の例は、エスケープピクセルとしてコーディングされるルーマピクセルを量子化するために使用されるルーマパレットQP値を決定するために使用され得る。さらに、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとしてコーディングされることに基づいて、ビデオエンコーダおよびビデオデコーダは、パレットコード化ブロックを含む現在の量子化グループのクロマQPオフセット値を決定し、パレットコード化ブロックのクロマパレットQP値を決定するためにクロマQPオフセット値に基づいてパレットコード化ブロックのために決定されたルーマパレットQP値を調整し得る。
[0103]開示される技法の別の例では、デルタQP値がパレットコード化ブロックのために有効化されるかどうかを示すシンタックス要素の値に応じてパレットコーディングされたCUごとにデルタQP値がシグナリングされ得る。この例では、シンタックス要素は、デルタQP値がパレットコード化ブロックのためにCUレベルでシグナリングされるかどうかを示すためにSPS、VPS、PPSまたはスライスヘッダのうちの1つ中でシグナリングされ得る。ルーマピクセルの場合、ビットストリーム中でSPS、VPS、PPS、またはスライスヘッダのうちの1つ中でシグナリングされるcu_qp_delta_enabled_flagによってデルタQP機構がCUのために有効化される場合、デルタQP値がシグナリングされ得る。クロマピクセルの場合、ビットストリーム中でSPS、VPS、PPS、またはスライスヘッダのうちの1つ中でシグナリングされるcu_chroma_qp_offset_enabled_flagによってクロマQPオフセット機構がCUのために有効化される場合、クロマQPオフセット値がシグナリングされ得る。
[0104]開示される技法のさらなる一例として、新しいパレットエントリの少なくとも一部分が量子化されるかどうかに応じて、デルタQP値がパレットコーディングされたCUのためにシグナリングされ得る。
[0105]予測されたQP値を使用してパレットコーディングブロックのパレットQP値を決定することの様々な例が、以下で説明される。以下の例の各々は、(それらが代替例として具体的に提示されない限り)他の例のいずれかと一緒にまたはそれとは別個に使用され得る。
[0106]開示される技法の一例では、ビデオエンコーダまたはビデオデコーダは、パレットコード化ブロックが現在の量子化グループ中の第1のブロックであるかどうかを決定すること、または現在の量子化グループ中のいずれかの前の非パレットコード化ブロックが非0係数を含むかどうかを決定することを行い得る。パレットコード化ブロックが、現在の量子化グループ中の第1のブロックであること、または現在の量子化グループ中の前の非パレットコード化ブロックのいずれも非ゼロ係数を含まないことに基づいて、ビデオエンコーダまたはビデオデコーダは、上記の式(5)からの予測されたQP値、たとえば、qPY_PREDから調整されたパレットコード化ブロックのパレットQP値を決定し得る。パレットQP値は、パレットコード化ブロック内のエスケープピクセルを量子化するために使用される、上記の式(6)および(11)ならびに表2からのルーマQP値およびクロマQP値、すなわち、QpY、Qp’Y、QpC、Qp’CbおよびQp’Crを含み得る。
[0107]この例では、場合によっては、デルタQP値が、パレットコード化ブロックのためにシグナリングされないことがあり、0に等しくなると仮定され得る。他の場合には、デルタQP値は、パレットコード化ブロックのためにシグナリングされ得、パレットQP値は、上記で説明された技法のうちの1つまたは複数に従って決定され得る。前の隣接量子化グループ中のブロックのQP値からパレットコード化ブロックのパレットQP値を導出するために、予測されたQPが使用され得る。この点において、パレットコード化ブロックは、非ゼロ係数のない(デルタQP値がシグナリングされない)非パレットコーディングされたTU、または非0係数のある(デルタQP値がシグナリングされる)非パレットコーディングされたTUと同様の方法で扱われ得る。
[0108]代替的に、パレットコード化ブロックが、現在の量子化グループ中の第1のブロックではないことと、現在の量子化グループ中の前の非パレットコード化ブロックのうちの少なくとも1つが非0係数を含むこととに基づいて、ビデオエンコーダまたはビデオデコーダは、現在の量子化グループ中の少なくとも1つの前の非パレットコード化ブロックのために前に決定された、ルーマQP値とクロマQP値とを含む量子化グループQP値にパレットQP値が等しくなると決定し得る。言い換えれば、現在の量子化グループ中の非0係数を有する少なくとも1つのTUの後にコーディングされる現在の量子化グループ中のパレットコード化ブロックについて、量子化グループのために決定されたルーマQP値とクロマQP値とがパレットコード化ブロックのために使用される。これらのルーマQP値とクロマQP値とは、量子化グループ中の他の非パレットコーディングされたTUのためにも使用されるQP値であり得る。
[0109]ルーマピクセルの場合、パレットコード化ブロックをも含む現在の量子化グループ中に含まれるブロックのためにデルタQP値が前に決定されていなかった場合のみ、パレットコード化ブロックのためにパレットデルタQP値がシグナリングされ得る。これは、パレットコード化ブロックが現在の量子化グループ中の第1のブロックである場合、または現在の量子化グループ中の前の非パレットコード化ブロックが非0係数を含まない場合に行われ得る。一例では、シンタックス要素、たとえば、IsCuQpDeltaCodedは、ルーマブロックのデルタQP値が現在の量子化グループのために以前にシグナリングされたかどうかを示し得る。デルタQP値が現在の量子化グループのために前に決定されていなかった場合、ルーマパレットコード化ブロックのパレットデルタQP値がシグナリングされる。ルーマパレットコード化ブロックのパレットデルタQP値がシグナリングされない場合、それは、0に等しくなると明示的に導出され得る。
[0110]クロマピクセルの場合、パレットコード化ブロックをも含む現在の量子化グループ中に含まれるブロックのためにクロマQPオフセット値が前に決定されていなかった場合のみ、パレットコード化ブロックのためにパレットクロマQPオフセット値がシグナリングされ得る。これは、パレットコード化ブロックが現在の量子化グループ中の第1のブロックである場合、または現在の量子化グループ中の前の非パレットコード化ブロックが非0係数を含まない場合に行われ得る。一例では、シンタックス要素、たとえば、IsCuChromaQPOffsetCodedは、クロマブロックのクロマQPオフセット値が現在の量子化グループのために以前にシグナリングされたかどうかを示し得る。クロマQPオフセット値が現在の量子化グループのために前に決定されていなかった場合、クロマパレットコード化ブロックのパレットクロマQPオフセット値がシグナリングされる。クロマパレットコード化ブロックのパレットクロマQPオフセット値がシグナリングされない場合、それは、0に等しくなると明示的に導出され得る。
[0111]概して、パレットコード化ブロックのパレットQP値は、上記で説明され、HEVCバージョン1、HEVC SCC WD1.0およびHEVC SCC WD2.0に記載されている量子化パラメータ導出プロセスに従って決定され得る。開示される技法の別の例では、パレットコード化ブロックについて、ビデオエンコーダまたはビデオデコーダは、明示的にシグナリングされたデルタQP値に基づいてパレットQP値を決定または導出することと、デルタQP値なしに予測されたQP値に基づいてパレットQP値を決定または導出することとの間で切り替え得る。この切替えは、SPS、VPS、PPS、またはスライスヘッダ中でシグナリングされるフラグを介して達成され得る。
[0112]パレットコード化ブロックのためのqPiに応じて(as a function of qPi)QpCを指定することの様々な例が、以下で説明される。上記の表2に示されるように、クロマ成分のために使用されるQP値は、ルーマ成分のために使用されるQP値に応じて非線形的に調整され得る。パレットベースのコーディングモードがルーマ成分とクロマ成分とで異なる特性を有するので、非線形調整は、パレットベースのコーディングモードについて簡略化され得る。一例として、パレットコード化ブロックについて、変数QpCがインデックスqPiに等しく設定され得る。
[0113]パレットコード化ブロック内のピクセルのためのデブロッキングフィルタ処理の適用を決定するために使用されるQP値の様々な例が、以下で説明される。たとえば、パレットコード化ブロックのためのデブロッキングフィルタ処理の適用を決定するために採用されるQP値として、上記で説明された様々なQP値と様々な調整とが使用され得る。
[0114]パレットコード化ブロックのための新しいパレットエントリの量子化を実行することの様々な例が、以下で説明される。開示される技法の一例では、現在のCUがパレットコード化ブロックとしてコーディングされる場合、パレットコード化ブロックのためのパレット中の新しいパレットエントリが量子化され得る。新しいパレットエントリを量子化するためのシグナリングおよびQP値は、以下の通りであり得る。ある場合には、新しいパレットエントリのQP値は、パレットコード化ブロック内のエスケープピクセル値を量子化するために決定されたQP値とは異なり得る。たとえば、新しいパレットエントリのQP値は、エスケープピクセルQP値からのオフセットとして設定され得る。
[0115]別の場合では、シンタックス要素、たとえば、フラグまたは位置インデックスは、パレットコード化ブロックのためのパレット中のどの新しいエントリが量子化され、どの新しいエントリが量子化されないかを示し得る。たとえば、新しいパレットエントリは、2つのサブセットに分割され得、第1のサブセットは、量子化されない(すなわち、ロスレスにコーディングされた)新しいエントリを含み、第2のサブセットは、量子化される新しいエントリを含む。フラグは、それが量子化されるか否かを示すために各新しいパレットエントリの後にシグナリングされ得る。代替的に、量子化されない各新しいパレットエントリの後にフラグがシグナリングされ得、一方、所与の新しいパレットエントリとすべての後続の新しいパレットエントリとが量子化されることを示すために別のフラグがシグナリングされ得る。新しいパレットエントリにいくつかの異なるレベルの量子化が適用され得る。
[0116]図1は、本開示の技法を利用し得る例示的なビデオコーディングシステム10を示すブロック図である。本明細書で使用される「ビデオコーダ」という用語は、ビデオエンコーダとビデオデコーダの両方を総称的に指す。本開示では、「ビデオコーディング」または「コーディング」という用語は、ビデオ符号化またはビデオ復号を総称的に指すことがある。ビデオコーディングシステム10のビデオエンコーダ20およびビデオデコーダ30は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得るデバイスの例を表す。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUのような、ビデオデータの様々なブロックを選択的にコーディングするように構成され得る。非パレットベースのコーディングモードは、HEVCバージョン1によって規定される様々なコーディングモードのような、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指すことがある。
[0117]図1に示されるように、ビデオコーディングシステム10は、ソースデバイス12と宛先デバイス14とを含む。ソースデバイス12は、符号化されたビデオデータを生成する。したがって、ソースデバイス12は、ビデオ符号化デバイスまたはビデオ符号化装置と呼ばれることがある。宛先デバイス14は、ソースデバイス12によって生成された符号化されたビデオデータを復号し得る。したがって、宛先デバイス14は、ビデオ復号デバイスまたはビデオ復号装置と呼ばれることがある。ソースデバイス12および宛先デバイス14は、ビデオコーディングデバイスまたはビデオコーディング装置の例であり得る。
[0118]ソースデバイス12および宛先デバイス14は、デスクトップコンピュータ、モバイルコンピューティングデバイス、ノートブック(たとえば、ラップトップ)コンピュータ、タブレットコンピュータ、セットトップボックス、いわゆる「スマート」フォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲームコンソール、車内コンピュータなどを含む、広範囲のデバイスを備え得る。
[0119]宛先デバイス14は、チャネル16を介してソースデバイス12から符号化されたビデオデータを受信し得る。チャネル16は、ソースデバイス12から宛先デバイス14に符号化されたビデオデータを移動させることが可能な、1つまたは複数の媒体またはデバイスを備え得る。一例では、チャネル16は、ソースデバイス12がリアルタイムで符号化されたビデオデータを直接宛先デバイス14に送信することを可能にする、1つまたは複数の通信媒体を備え得る。この例では、ソースデバイス12は、ワイヤレス通信プロトコルなどの通信規格に従って符号化されたビデオデータを変調し得、変調されたビデオデータを宛先デバイス14に送信し得る。1つまたは複数の通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などの、ワイヤレスおよび/またはワイヤード通信媒体を含み得る。1つまたは複数の通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはグローバルネットワーク(たとえば、インターネット)などの、パケットベースネットワークの一部を形成し得る。1つまたは複数の通信媒体は、ソースデバイス12から宛先デバイス14への通信を容易にする、ルータ、スイッチ、基地局、または他の機器を含み得る。
[0120]別の例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶する記憶媒体を含み得る。この例では、宛先デバイス14は、たとえば、ディスクアクセスまたはカードアクセスを介して、記憶媒体にアクセスし得る。記憶媒体は、Blu−ray(登録商標)ディスク、DVD、CD−ROM、フラッシュメモリ、または符号化されたビデオデータを記憶するための他の適切なデジタル記憶媒体など、種々のローカルにアクセスされるデータ記憶媒体を含み得る。
[0121]さらなる例では、チャネル16は、ソースデバイス12によって生成された符号化されたビデオデータを記憶する、ファイルサーバまたは別の中間ストレージデバイスを含み得る。この例では、宛先デバイス14は、ストリーミングまたはダウンロードを介して、ファイルサーバまたは他の中間ストレージデバイスに記憶された符号化されたビデオデータにアクセスし得る。ファイルサーバは、符号化されたビデオデータを記憶することと、符号化ビデオデータを宛先デバイス14に送信することとが可能なタイプのサーバであり得る。例示的なファイルサーバは、(たとえば、ウェブサイト用の)ウェブサーバ、ファイル転送プロトコル(FTP)サーバ、ネットワーク接続ストレージ(NAS)デバイス、およびローカルディスクドライブを含む。
[0122]宛先デバイス14は、インターネット接続などの標準的なデータ接続を通して符号化されたビデオデータにアクセスし得る。例示的なタイプのデータ接続は、ファイルサーバ上に記憶された符号化されたビデオデータにアクセスするのに好適である、ワイヤレスチャネル(たとえば、Wi−Fi(登録商標)接続)、ワイヤード接続(たとえば、DSL、ケーブルモデムなど)、またはその両方の組合せを含み得る。ファイルサーバからの符号化されたビデオデータの送信は、ストリーミング送信、ダウンロード送信、またはその両方の組合せであり得る。
[0123]本開示の技法は、ワイヤレス適用例または設定に限定されない。本技法は、オーバージエアテレビジョン放送、ケーブルテレビジョン送信、衛星テレビジョン送信、たとえばインターネットを介したストリーミングビデオ送信、データ記憶媒体上に記憶するためのビデオデータの符号化、データ記憶媒体上に記憶されたビデオデータの復号、または他の用途などの、様々なマルチメディア用途をサポートするビデオコーディングに適用され得る。いくつかの例では、ビデオコーディングシステム10は、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、および/またはビデオ電話などの用途をサポートするために、単方向または双方向のビデオ送信をサポートするように構成され得る。
[0124]図1に示されるビデオコーディングシステム10は例にすぎず、本開示の技法は、符号化デバイスと復号デバイスとの間の任意のデータ通信を必ずしも含まないビデオコーディング設定(たとえば、ビデオ符号化またはビデオ復号)に適用され得る。他の例では、データが、ローカルメモリから取り出されること、ネットワークを介してストリーミングされることなどが行われる。ビデオ符号化デバイスはデータを符号化し、メモリに記憶し得、および/またはビデオ復号デバイスはメモリからデータを取り出し、復号し得る。多くの例では、符号化および復号は、互いに通信しないが、メモリにデータを符号化し、および/またはメモリからデータを取り出して復号するだけであるデバイスによって実行される。
[0125]図1の例では、ソースデバイス12は、ビデオソース18と、ビデオエンコーダ20と、出力インターフェース22とを含む。いくつかの例では、出力インターフェース22は、変調器/復調器(モデム)および/または送信機を含み得る。ビデオソース18は、たとえばビデオカメラなどのビデオキャプチャデバイス、以前にキャプチャされたビデオデータを含んでいるビデオアーカイブ、ビデオコンテンツプロバイダからビデオデータを受信するためのビデオフィードインターフェース、および/またはビデオデータを生成するためのコンピュータグラフィックスシステム、あるいはビデオデータのそのようなソースの組合せを含み得る。
[0126]ビデオエンコーダ20は、ビデオソース18からのビデオデータを符号化し得る。いくつかの例では、ソースデバイス12は、出力インターフェース22を介して宛先デバイス14に符号化されたビデオデータを直接送信する。他の例では、符号化されたビデオデータはまた、復号および/または再生のための宛先デバイス14による後のアクセスのために、記憶媒体またはファイルサーバ上に記憶され得る。
[0127]図1の例では、宛先デバイス14は、入力インターフェース28と、ビデオデコーダ30と、ディスプレイデバイス32とを含む。いくつかの例では、入力インターフェース28は、受信機および/またはモデムを含む。入力インターフェース28は、チャネル16を介して符号化されたビデオデータを受信し得る。ディスプレイデバイス32は、宛先デバイス14と一体化され得るか、またはその外部にあり得る。概して、ディスプレイデバイス32は、復号されたビデオデータを表示する。ディスプレイデバイス32は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスを備え得る。
[0128]ビデオエンコーダ20およびビデオデコーダ30は、各々、1つもしくは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリート論理、ハードウェア、またはそれらの任意の組合せなどの、様々な適切な回路のうちのいずれかとして実装され得る。本技法が部分的にソフトウェアで実装される場合、デバイスは、好適な非一時的コンピュータ可読記憶媒体にソフトウェアの命令を記憶し得、本開示の技法を実行するために、1つまたは複数のプロセッサを使用してその命令をハードウェアで実行し得る。(ハードウェア、ソフトウェア、ハードウェアとソフトウェアの組合せなどを含む)上記のいずれもが、1つまたは複数のプロセッサであると見なされ得る。ビデオエンコーダ20およびビデオデコーダ30の各々は1つまたは複数のエンコーダまたはデコーダ中に含まれ得、そのいずれも、それぞれのデバイスにおいて複合エンコーダ/デコーダ(コーデック)の一部として統合され得る。
[0129]本開示は全般に、ビデオエンコーダ20が、ある情報をビデオデコーダ30のような別のデバイスに「シグナリングすること」または「送信すること」に言及することがある。「シグナリング」または「送信」という用語は、一般に、圧縮されたビデオデータを復号するために使用されるシンタックス要素および/または他のデータの通信を指すことがある。そのような通信は、リアルタイムまたはほぼリアルタイムに起こり得る。代替的に、そのような通信は、符号化時に符号化されたビットストリーム中でシンタックス要素をコンピュータ可読記憶媒体に記憶するときに行われることがあるなど、ある時間期間(span)にわたって行われ得、次いで、これらの要素は、この媒体に記憶された後の任意の時間に復号デバイスによって取り出され得る。
[0130]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、上で言及されHEVCバージョン1に記載されるHEVC規格のような、ビデオ圧縮規格に従って動作する。基本的なHEVC規格に加えて、HEVCのためのスケーラブルビデオコーディング拡張、マルチビュービデオコーディング拡張、および3Dコーディング拡張を作成するための作業が進行中である。加えて、たとえば本開示で説明されるような、パレットベースのコーディングモードは、HEVC規格の拡張のために提供され得る。いくつかの例では、パレットベースのコーディングのために本開示で説明される技法は、ITU−T−H.264/AVC規格または将来の規格のような、他のビデオコーディング規格に従って動作するように構成される、エンコーダおよびデコーダに適用され得る。したがって、HEVCコーデックにおけるコーディングユニット(CU)または予測ユニット(PU)のコーディングのためのパレットベースのコーディングモードの適用が、例として説明される。
[0131]HEVCおよび他のビデオコーディング規格では、ビデオシーケンスは、一般に、一連のピクチャを含む。ピクチャは「フレーム」と呼ばれることもある。ピクチャは、SL、SCbおよびSCrと示される3つのサンプルアレイを含み得る。SLは、ルーマサンプルの2次元アレイ(すなわち、ブロック)である。SCbは、Cbクロミナンスサンプルの2次元アレイである。SCrは、Crクロミナンスサンプルの2次元アレイである。クロミナンスサンプルは、本明細書では「クロマ」サンプルと呼ばれることもある。他の事例では、ピクチャは、モノクロームであり得、ルーマサンプルのアレイのみを含み得る。
[0132]ピクチャの符号化された表現を生成するために、ビデオエンコーダ20は、コーディングツリーユニット(CTU)のセットを生成し得る。CTUの各々は、ルーマサンプルのコーディングツリーブロック、クロマサンプルの2つの対応するコーディングツリーブロック、およびコーディングツリーブロックのサンプルをコーディングするために使用されるシンタックス構造であり得る。コーディングツリーブロックは、サンプルのN×Nのブロックであり得る。CTUは、「ツリーブロック」または「最大コーディングユニット」(LCU)と呼ばれることもある。HEVCのCTUは、H.264/AVCなどの他の規格のマクロブロックに広い意味で類似し得る。しかしながら、CTUは、必ずしも特定のサイズに限定されるとは限らず、1つまたは複数のコーディングユニット(CU)を含み得る。スライスは、ラスタ走査において連続的に順序付けられた整数個のCTUを含み得る。
[0133]コード化CTUを生成するために、ビデオエンコーダ20は、コーディングツリーブロックをコーディングブロックに分割するように、CTUのコーディングツリーブロックに対して4分木区分を再帰的に(recursively)実行し得、したがって、「コーディングツリーユニット」という名称がある。コーディングブロックは、サンプルのN×Nブロックである。CUは、ルーマサンプルアレイ、CbサンプルアレイおよびCrサンプルアレイ、ならびにコーディングブロックのサンプルをコーディングするために使用されるシンタックス構造を有するピクチャの、ルーマサンプルの1つのコーディングブロックおよびクロマサンプルの2つの対応するコーディングブロックであり得る。ビデオエンコーダ20は、CUのコーディングブロックを1つまたは複数の予測ブロックに区分し得る。予測ブロックは、同じ予測が適用されるサンプルの矩形(すなわち、正方形または非正方形)ブロックであり得る。CUの予測ユニット(PU)は、ルーマサンプルの予測ブロック、ピクチャのクロマサンプルの2つの対応する予測ブロック、および予測ブロックサンプルを予測するために使用されるシンタックス構造であり得る。ビデオエンコーダ20は、CUの各PUのルーマ予測ブロックとCb予測ブロックとCr予測ブロックとのための予測ルーマブロックと予測Cbブロックと予測Crブロックとを生成し得る。
[0134]ビデオエンコーダ20は、PUのための予測ブロックを生成するために、イントラ予測またはインター予測を使用し得る。ビデオエンコーダ20がPUの予測ブロックを生成するためにイントラ予測を使用する場合、ビデオエンコーダ20は、PUに関連するピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。
[0135]ビデオエンコーダ20がPUの予測ブロックを生成するためにインター予測を使用する場合、ビデオエンコーダ20は、PUに関連するピクチャ以外の1つまたは複数のピクチャの復号されたサンプルに基づいて、PUの予測ブロックを生成し得る。ビデオエンコーダ20は、PUの予測ブロックを生成するために、単予測または双予測を使用し得る。ビデオエンコーダ20がPUのための予測ブロックを生成するために単予測を使用するとき、PUは単一の動きベクトル(MV)を有し得る。ビデオエンコーダ20がPUのための予測ブロックを生成するために双予測を使用するとき、PUは2つのMVを有し得る。
[0136]ビデオエンコーダ20がCUの1つまたは複数のPUに関する予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成した後、ビデオエンコーダ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コーディングブロック中の対応するサンプルとの間の差分を示し得る。
[0137]さらに、ビデオエンコーダ20は、CUのルーマ残差ブロックと、Cb残差ブロックと、Cr残差ブロックとを、1つまたは複数のルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに分解するために、4分木区分を使用し得る。変換ブロックは、同じ変換が適用されるサンプルの矩形ブロックであり得る。CUの変換ユニット(TU)は、ルーマサンプルの変換ブロック、クロマサンプルの2つの対応する変換ブロック、および変換ブロックサンプルを変換するために使用されるシンタックス構造であり得る。したがって、CUの各TUは、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックに関連付けられ得る。TUに関連するルーマ変換ブロックはCUのルーマ残差ブロックのサブブロックであり得る。Cb変換ブロックは、CUのCb残差ブロックのサブブロックであり得る。Cr変換ブロックは、CUのCr残差ブロックのサブブロックであり得る。
[0138]ビデオエンコーダ20は、TUに関するルーマ係数ブロックを生成するために、TUのルーマ変換ブロックに1つまたは複数の変換を適用し得る。係数ブロックは、変換係数の2次元アレイであり得る。変換係数は、スカラー量であり得る。ビデオエンコーダ20は、TUのためのCb係数ブロックを生成するために、TUのCb変換ブロックに1つまたは複数の変換を適用し得る。ビデオエンコーダ20は、TUのためのCr係数ブロックを生成するために、TUのCr変換ブロックに1つまたは複数の変換を適用し得る。
[0139]係数ブロック(たとえば、ルーマ係数ブロック、Cb係数ブロックまたはCr係数ブロック)を生成した後、ビデオエンコーダ20は、係数ブロックを量子化し得る。量子化は、一般に、変換係数を表すために使用されるデータの量をできるだけ低減するために変換係数が量子化され、さらなる圧縮を提供する処理を指す。ビデオエンコーダ20が係数ブロックを量子化した後に、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素をエントロピー符号化し得る。たとえば、ビデオエンコーダ20は、量子化された変換係数を示すシンタックス要素に対してコンテキスト適応型バイナリ算術コーディング(CABAC:Context-Adaptive Binary Arithmetic Coding)を実行し得る。ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素をビットストリームの中に出力し得る。
[0140]ビデオエンコーダ20は、エントロピー符号化されたシンタックス要素を含むビットストリームを出力し得る。ビットストリームは、コード化ピクチャおよび関連するデータの表現を形成するビットのシーケンスを含み得る。ビットストリームは、一連のネットワークアブストラクションレイヤ(NAL:network abstraction layer)ユニットを備え得る。NALユニットの各々は、NALユニットヘッダを含み、ローバイトシーケンスペイロード(RBSP:raw byte sequence payload)をカプセル化する。NALユニットヘッダは、NALユニットタイプコードを示すシンタックス要素を含み得る。NALユニットのNALユニットヘッダによって規定されるNALユニットタイプコードは、NALユニットのタイプを示す。RBSPは、NALユニット内にカプセル化された整数個のバイトを含む、シンタックス構造であり得る。いくつかの事例では、RBSPは0ビットを含む。
[0141]異なるタイプのNALユニットは、異なるタイプのRBSPをカプセル化し得る。たとえば、第1のタイプのNALユニットはピクチャパラメータセット(PPS)に関するRBSPをカプセル化することができ、第2のタイプのNALユニットはコード化スライスに関するRBSPをカプセル化することができ、第3のタイプのNALユニットはSEIに関するRBSPをカプセル化し得、以下同様である。ビデオコーディングデータのためのRBSPをカプセル化するNALユニットは(パラメータセットおよびSEIメッセージのためのRBSPとは対照的に)、ビデオコーディングレイヤ(VCL)NALユニットと呼ばれることがある。
[0142]ビデオデコーダ30は、ビデオエンコーダ20によって生成されたビットストリームを受信し得る。加えて、ビデオデコーダ30は、ビットストリームからシンタックス要素を復号するためにビットストリームを解析し得る。ビデオデコーダ30は、ビットストリームから復号されたシンタックス要素に少なくとも部分的に基づいて、ビデオデータのピクチャを再構築し得る。ビデオデータを再構築するためのプロセスは、全般に、ビデオエンコーダ20によって実行されるプロセスの逆であり得る。
[0143]たとえば、ビデオデコーダ30は、現在のCUのPUの予測ブロックを決定するために、PUのMVを使用し得る。加えて、ビデオデコーダ30は、現在のCUのTUに関連する変換係数ブロックを逆量子化し得る。ビデオデコーダ30は、現在のCUのTUに関連する変換ブロックを再構築するために、変換係数ブロックに対して逆変換を実行し得る。ビデオデコーダ30は、現在のCUのPUのための予測ブロックのサンプルを現在のCUのTUの変換ブロックの対応するサンプルに追加することによって現在のCUのコーディングブロックを再構築し得る。ピクチャの各CUのためのコーディングブロックを再構築することによって、ビデオデコーダ30はピクチャを再構築し得る。
[0144]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、パレットベースのコーディングを実行するように構成され得る。たとえば、パレットベースのコーディングでは、上で説明されたイントラ予測コーディング技法またはインター予測コーディング技法を実行するのではなく、ビデオエンコーダ20およびビデオデコーダ30は、特定のエリア(たとえば、所与のブロック)のビデオデータを表すための色のテーブルとして、いわゆるパレットをコーディングし得る。各ピクセルは、ピクセルの色を表すパレット中のエントリに関連付けられ得る。たとえば、ビデオエンコーダ20およびビデオデコーダ30は、ピクセル値をパレット中の適切な値に関連付けるインデックスをコーディングし得る。
[0145]上の例では、ビデオエンコーダ20は、ブロックのためのパレットを決定すること、各ピクセルの値を表すためのパレット中のエントリを位置特定すること、および、ピクセル値をパレットに関連付ける、ピクセルのインデックス値を用いてパレットを符号化することによって、ビデオデータのブロックを符号化し得る。ビデオデコーダ30は、符号化されたビットストリームから、ブロックのためのパレットと、さらにはブロックのピクセルのインデックス値とを取得し得る。ビデオデコーダ30は、ブロックのピクセル値を再構築するために、ピクセルのインデックス値をパレットのエントリに関連付け得る。
[0146]いくつかの例では、ビデオエンコーダ20は、同じピクセル値を有する所与の走査順序の連続するピクセルの数を示す1つまたは複数のシンタックス要素を符号化し得る。同様の値のピクセル値のストリング(string)は、本明細書では「ラン」と呼ばれることがある。例示を目的とする例では、所与の走査順序の2つの連続するピクセルが異なる値を有する場合、ランは0に等しい。所与の走査順序の2つの連続するピクセルが同じ値を有するが、その走査順序の3番目のピクセルが異なる値を有する場合、ランは1に等しい。ビデオデコーダ30は、符号化されたビットストリームからランを示すシンタックス要素を取得し、そのデータを使用して、同じインデックス値を有する連続するピクセルロケーションの数を決定し得る。
[0147]いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、インデックス値のマップの1つまたは複数のエントリに対する線コピーを実行し得る。たとえば、ビデオエンコーダ20は、インデックスマップ中の特定のエントリに対するピクセル値が、特定のエントリの上の線(a line above)中のエントリに等しいことを示し得る。ビデオエンコーダ20はまた、特定のエントリの上の線の中のエントリに等しい走査順序におけるインデックスの数をランとして示し得る。この例では、ビデオエンコーダ20およびまたはビデオデコーダ30は、規定された隣接する線から、および、現在コーディングされているマップの線に対する規定された数のエントリから、インデックス値をコピーし得る。
[0148]本開示の技法によれば、ビデオエンコーダ20およびビデオデコーダ30は、パレットコード化ブロックのピクセルのためのループ内フィルタ処理(たとえば、デブロッキングフィルタ処理および/またはSAOフィルタ処理)の設計および適用を決定し得る。より詳細には、ビデオエンコーダ20およびビデオデコーダ30は、少なくとも1つのパレットコード化ブロックによって形成されるブロック境界に沿ったピクセルのためのデブロッキングフィルタ処理の適用を決定し得る。さらに、ビデオエンコーダ20およびビデオデコーダ30は、パレットコード化ブロックのエスケープピクセル値を量子化するために使用されるQP値およびデルタQP値を決定し得る。たとえば、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとしてコーディングされることに基づいて、ビデオエンコーダ20およびビデオデコーダ30は、パレットコード化ブロックのパレットQP値を決定し得、パレットQP値は、予測されたQP値から調整される。特に、いくつかの例では、ビデオエンコーダ20およびビデオデコーダ30は、図4〜図6に関してより詳細に説明される本開示の技法を実行するように構成され得る。
[0149]図2は、本開示の技法を実装し得る例示的なビデオエンコーダ20を示すブロック図である。図2は、説明の目的で与えられており、本開示において広く例示され、説明される技法を限定するものと見なされるべきではない。説明の目的で、本開示は、HEVCコーディングのコンテキストにおいて、ビデオエンコーダ20を説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0150]ビデオエンコーダ20は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得る、デバイスの例を表す。たとえば、ビデオエンコーダ20は、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUのような、ビデオデータの様々なブロックを選択的にコーディングするように構成され得る。非パレットベースのコーディングモードは、HEVCバージョン1によって規定される様々なコーディングモードのような、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指すことがある。ビデオエンコーダ20は、一例では、ピクセル値を示すエントリを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセルロケーションのピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロック中のピクセルロケーションの少なくともいくつかを、パレット中の選択されたピクセル値にそれぞれ対応するパレット中のエントリに関連付ける情報をシグナリングするように構成され得る。シグナリングされた情報は、ビデオデータを復号するためにビデオデコーダ30によって使用され得る。
[0151]図2の例では、ビデオエンコーダ20は、ビデオデータメモリ98と、予測処理ユニット100と、残差生成ユニット102と、変換処理ユニット104と、量子化ユニット106と、逆量子化ユニット108と、逆変換処理ユニット110と、再構築ユニット112と、フィルタユニット114と、復号されたピクチャバッファ116と、エントロピー符号化ユニット118とを含む。予測処理ユニット100は、インター予測処理ユニット120と、イントラ予測処理ユニット126とを含む。インター予測処理ユニット120は、動き推定ユニットと、動き補償ユニットと(図示せず)を含む。ビデオエンコーダ20はまた、本開示で説明されるパレットベースのコーディング技法の様々な態様を実行するように構成される、パレットベースの符号化ユニット122を含む。他の例では、ビデオエンコーダ20は、より多数の、より少数の、または異なる機能的な構成要素を含み得る。
[0152]ビデオデータメモリ98は、ビデオエンコーダ20の構成要素によって符号化されるべきビデオデータを記憶し得る。ビデオデータメモリ98に記憶されるビデオデータは、たとえば、ビデオソース18から取得され得る。復号されたピクチャバッファ116は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオエンコーダ20によってビデオデータを符号化する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ98および復号されたピクチャバッファ116は、同期DRAM(SDRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM(登録商標))、または他のタイプのメモリデバイスを含む、ダイナミックランダムアクセスメモリ(DRAM)のような様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ98および復号されたピクチャバッファ116は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ98は、ビデオエンコーダ20の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[0153]ビデオエンコーダ20はビデオデータを受信し得る。ビデオエンコーダ20は、ビデオデータのピクチャのスライスの中の各CTUを符号化し得る。CTUの各々は、等しいサイズのルーマコーディングツリーブロック(CTB)とピクチャの対応するCTBとに関連付けられ得る。CTUを符号化することの一部として、予測処理ユニット100は、CTUのCTBを徐々により小さいブロックに分割するために、4分木区分を実行し得る。より小さいブロックはCUのコーディングブロックであり得る。たとえば、予測処理ユニット100は、CTUに関連するCTBを4つの等しいサイズのサブブロックに区分し得、サブブロックのうちの1つまたは複数を4つの等しいサイズのサブサブブロックに区分し得、以下同様である。
[0154]ビデオエンコーダ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サイズ向けの非対称区分をサポートし得る。
[0155]インター予測処理ユニット120は、CUの各PUに対してインター予測を実行することによって、PUについての予測データを生成し得る。PUについての予測データは、PUの予測ブロックとPUについての動き情報とを含み得る。インター予測ユニット121は、PUがIスライス中にあるか、Pスライス中にあるか、Bスライス中にあるかに応じて、CUのPUに対して異なる動作を実行し得る。Iスライス中では、すべてのPUがイントラ予測される。したがって、PUがIスライス中にある場合、インター予測ユニット121は、PUに対してインター予測を実行しない。したがって、Iモードで符号化されるブロックでは、予測されるブロックは、同じフレーム内の以前に符号化された隣接ブロックからの空間的予測を使用して形成される。
[0156]PUがPスライス中にある場合、インター予測処理ユニット120の動き推定ユニットは、PUの参照領域について参照ピクチャのリスト(たとえば、「RefPicList0」)中の参照ピクチャを探索し得る。PUの参照領域は、PUのサンプルブロックに最も密接に対応するサンプルブロックを含む参照ピクチャ内の領域であり得る。動き推定ユニットは、PUの参照領域を含んでいる参照ピクチャのRefPicList0中での位置を示す参照インデックスを生成し得る。加えて、動き推定ユニットは、PUのコーディングブロックと、参照領域に関連する参照ロケーションとの間の空間変位を示すMVを生成し得る。たとえば、MVは、現在の復号されたピクチャ中の座標から参照ピクチャ中の座標までのオフセットを提供する2次元ベクトルであり得る。動き推定ユニットは、PUの動き情報として、参照インデックスとMVとを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照ロケーションにおける実際のまたは補間されたサンプルに基づいて、PUの予測ブロックを生成し得る。
[0157]PUがBスライス中にある場合、動き推定ユニットは、PUについての単予測または双予測を実行し得る。PUについての単予測を実行するために、動き推定ユニットは、PUの参照領域についてRefPicList0または第2の参照ピクチャリスト(「RefPicList1」)の参照ピクチャを探索し得る。動き推定ユニットは、PUの動き情報として、参照領域を含んでいる参照ピクチャのRefPicList0またはRefPicList1中の位置を示す参照インデックスと、PUの予測ブロックと参照領域に関連する参照ロケーションとの間の空間変位を示すMVと、参照ピクチャがRefPicList0中にあるかまたはRefPicList1中にあるかを示す1つまたは複数の予測方向インジケータとを出力し得る。インター予測処理ユニット120の動き補償ユニットは、PUの動きベクトルによって示された参照領域における実際のまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
[0158]PUについての双方向インター予測を実行するために、動き推定ユニットは、PUの参照領域についてRefPicList0中の参照ピクチャを探索し得、またPUの別の参照領域についてRefPicList1中の参照ピクチャを探索し得る。動き推定ユニットは、参照領域を含んでいる参照ピクチャのRefPicList0およびRefPicList1中での位置を示す参照ピクチャインデックスを生成し得る。加えて、動き推定ユニットは、参照領域に関連する参照ロケーションとPUのサンプルブロックとの間の空間変位を示すMVを生成し得る。PUの動き情報は、PUの参照インデックスとMVとを含み得る。動き補償ユニットは、PUの動きベクトルによって示される参照領域における実際のサンプルまたは補間されたサンプルに少なくとも部分的に基づいて、PUの予測ブロックを生成し得る。
[0159]イントラ予測処理ユニット126は、PUに対してイントラ予測を実行することによって、PUについての予測データを生成し得る。PUのための予測データは、PUについての予測ブロックと、様々なシンタックス要素とを含み得る。イントラ予測処理ユニット126は、Iスライス、Pスライス、およびBスライスの中のPUに対してイントラ予測を実行し得る。
[0160]PUに対してイントラ予測を実行するために、イントラ予測処理ユニット126は、PUについての予測データの複数のセットを生成するために、複数のイントラ予測モードを使用し得る。イントラ予測処理ユニット126は、PUの予測ブロックを生成するために隣接PUのサンプルブロックからのサンプルを使用し得る。隣接PUは、PU、CU、およびCTUについて左から右、上から下の符号化順序を仮定すると、PUの上、右上、左上、または左にあり得る。イントラ予測処理ユニット126は、様々な数のイントラ予測モード、たとえば33個の方向のイントラ予測モードを使用し得る。いくつかの例では、イントラ予測モードの数は、PUに関連する領域のサイズに依存し得る。
[0161]予測処理ユニット100は、PUに対してインター予測処理ユニット120によって生成された予測データ、またはPUに対してイントラ予測処理ユニット126によって生成された予測データの中から、CUのPUについての予測データを選択し得る。いくつかの例では、予測処理ユニット100は、予測データのセットのレート/ひずみメトリックに基づいて、CUのPUについての予測データを選択する。選択された予測データの予測サンプルブロックは、本明細書では、選択された予測サンプルブロックと呼ばれることがある。
[0162]残差生成ユニット102は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロック、ならびにCUのPUの選択された予測ルーマブロック、予測Cbブロック、および予測Crブロックに基づいて、CUのルーマ残差ブロックと、Cb残差ブロックと、Cr残差ブロックとを生成し得る。たとえば、残差生成ユニット102は、残差ブロック中の各サンプルがCUのコーディングブロック中のサンプルとCUのPUの対応する選択された予測サンプルブロック中の対応するサンプルとの間の差分に等しい値を有するようにCUの残差ブロックを生成し得る。
[0163]変換処理ユニット104は、CUに関連する残差ブロックをCUのTUに関連する変換ブロックに区分するために、4分木区分を実行し得る。したがって、TUは、ルーマ変換ブロックおよび2つのクロマ変換ブロックに関連付けられ得る。CUのTUのルーマ変換ブロックおよびクロマ変換ブロックのサイズおよび位置は、CUのPUの予測ブロックのサイズおよび位置に基づくことも基づかないこともある。「残差4分木」(RQT)として知られる4分木構造は、領域の各々に関連するノードを含み得る。CUのTUは、RQTのリーフノードに対応し得る。
[0164]変換処理ユニット104は、TUの変換ブロックに1つまたは複数の変換を適用することによって、CUの各TUに関する変換係数ブロックを生成し得る。変換処理ユニット104は、TUに関連する変換ブロックに様々な変換を適用し得る。たとえば、変換処理ユニット104は、離散コサイン変換(DCT)、方向変換、または概念的に同様の変換を、変換ブロックに適用し得る。いくつかの例では、変換処理ユニット104は、変換ブロックに変換を適用しない。そのような例では、変換ブロックは、変換係数ブロックとして扱われ得る。
[0165]量子化ユニット106は、係数ブロック内の変換係数を量子化し得る。量子化プロセスは、変換係数の一部または全部に関連するビット深度を低減し得る。たとえば、nビット変換係数は量子化の間にmビットの変換係数に切り捨てられ得、ただし、nはmよりも大きい。量子化ユニット106は、CUに関連する量子化パラメータ(QP)値に基づいて、CUのTUに関連する係数ブロックを量子化し得る。ビデオエンコーダ20は、CUに関連するQP値を調整することによって、CUに関連する係数ブロックに適用される量子化の程度を調整し得る。量子化は情報の損失をもたらし得、したがって、量子化された変換係数は元の係数よりも低い精度を有し得る。
[0166]逆量子化ユニット108および逆変換処理ユニット110は、係数ブロックから残差ブロックを再構築するために、それぞれ、係数ブロックに逆量子化と逆変換とを適用し得る。再構築ユニット112は、TUに関連する再構築された変換ブロックを生成するために、再構築された残差ブロックを、予測処理ユニット100によって生成された1つまたは複数の予測サンプルブロックからの対応するサンプルに追加し得る。このようにCUのTUごとに変換ブロックを再構築することによって、ビデオエンコーダ20は、CUのコーディングブロックを再構築し得る。
[0167]フィルタユニット114は、CUに関連するコーディングブロックの中のブロッキングアーティファクトを低減するために、1つまたは複数のデブロッキング動作を実行し得る。復号されたピクチャバッファ116は、フィルタユニット114が、再構築されたコーディングブロックに対して1つまたは複数のデブロッキング動作を実行した後、再構築されたコーディングブロックを記憶し得る。インター予測処理ユニット120は、他のピクチャのPUに対してインター予測を実行するために、再構築されたコーディングブロックを含んでいる参照ピクチャを使用し得る。加えて、イントラ予測処理ユニット126は、CUと同じピクチャ内の他のPUに対してイントラ予測を実行するために、復号されたピクチャバッファ116内の再構築されたコーディングブロックを使用し得る。
[0168]エントロピー符号化ユニット118は、ビデオエンコーダ20の他の機能的な構成要素からデータを受信し得る。たとえば、エントロピー符号化ユニット118は、量子化ユニット106から係数ブロックを受信し得、予測処理ユニット100からシンタックス要素を受信し得る。エントロピー符号化ユニット118は、エントロピー符号化されたデータを生成するために、データに対して1つまたは複数のエントロピー符号化動作(operations)を実行し得る。たとえば、エントロピー符号化ユニット118は、コンテキスト適応型可変長コーディング(CAVLC:context-adaptive variable length coding)動作、CABAC動作、変数−変数(V2V:variable-to-variable)長コーディング動作、シンタックスベースコンテキスト適応型バイナリ算術コーディング(SBAC:syntax-based context-adaptive binary arithmetic coding)動作、確率間隔区分エントロピー(PIPE:Probability Interval Partitioning Entropy)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作をデータに対して実行し得る。ビデオエンコーダ20は、エントロピー符号化ユニット118によって生成されたエントロピー符号化されたデータを含むビットストリームを出力し得る。たとえば、ビットストリームは、CUのためのRQTを表すデータを含み得る。
[0169]本開示の様々な例によれば、ビデオエンコーダ20は、パレットベースのコーディングを実行するように構成され得る。HEVCフレームワークに関して、例として、パレットベースのコーディング技法は、コーディングユニット(CU)モードとして使用されるように構成され得る。他の例では、パレットベースのコーディング技法は、HEVCのフレームワークにおいてPUモードとして使用されるように構成され得る。したがって、CUモードのコンテキストにおいて(本開示全体で)本明細書で説明される開示されるプロセスのすべてが、追加で、または代替的に、PUに適用され得る。しかしながら、これらのHEVCベースの例は、本明細書で説明されるパレットベースのコーディング技法の制約または制限であると見なされるべきではなく、それは、そのような技法は、他の既存のシステム/規格もしくはまだ開発されていないシステム/規格とは独立に、またはそれらの一部として機能するように適用され得るからである。これらの場合、パレットコーディングのためのユニットは、正方形のブロックであっても、長方形のブロックであってもよく、さらには非長方形の領域であってもよい。
[0170]パレットベースの符号化ユニット122は、たとえば、パレットベースの符号化モードがたとえばCUまたはPUのために選択されるとき、パレットベースの符号化を実行し得る。たとえば、パレットベースの符号化ユニット122は、ピクセル値を示すエントリを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセルロケーションのピクセル値を表すためにパレット中のピクセル値を選択し、ビデオデータのブロック中のピクセルロケーションの少なくともいくつかを、パレット中の選択されたピクセル値にそれぞれ対応するパレット中のエントリに関連付ける情報をシグナリングするように構成され得る。様々な機能がパレットベースの符号化ユニット122によって実行されるものとして説明されるが、そのような機能のいくつかまたはすべては、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
[0171]本開示の技法によれば、ビデオエンコーダ20は、復号されたピクチャバッファ116中に再構築されたブロックを記憶するより前にフィルタユニット114によって再構築されたパレットコード化ブロックのピクセルのためのループ内フィルタ処理(たとえば、デブロッキングフィルタ処理および/またはSAOフィルタ処理)の設計および適用を決定するように構成され得る。より詳細には、ビデオエンコーダ20のパレットベースの符号化ユニット122は、少なくとも1つのパレットコード化ブロックによって形成されるブロック境界に沿ったピクセルのためのフィルタユニット114によるデブロッキングフィルタ処理の適用を決定するように構成され得る。たとえば、ビデオデータの第1のブロックがパレットコード化ブロックであることに基づいて、パレットベースの符号化ユニット122は、ビデオデータの再構築された第1のブロックと再構築された第2のブロックとの間に形成されるブロック境界において、第1のブロックの再構築されたバージョン内のピクセルのためのフィルタユニット114によるデブロッキングフィルタ処理を無効化し得る。パレットベースの符号化ユニット122はまた、再構築された第1のブロックと再構築された第2のブロックとの間に形成されるブロック境界において再構築された第2のブロック内のピクセルのためのフィルタユニット114によるデブロッキングフィルタ処理を適用すべきか否かを決定し得る。パレットコード化ブロックのデブロッキングフィルタ処理の適用を決定するための技法が、図4および図5に関してより詳細に説明される。
[0172]本開示の技法にさらによれば、ビデオエンコーダ20は、パレットコード化ブロックのエスケープピクセル値を量子化するために量子化ユニット106によって使用されるQP値とデルタQP値とを決定するように構成され得る。たとえば、ビデオエンコーダ20は、パレットコード化ブロック内の少なくとも1つのピクセルがパレットコード化ブロックのためのパレット中に含まれない色値を有するエスケープピクセルとして符号化されるかどうかを示す第1のシンタックス要素をビットストリームにおいて符号化するように構成され得る。ビデオエンコーダ20は、さらに、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして符号化されることに基づいて、パレットコード化ブロックのパレットQP値を決定すること、パレットQP値は、予測されたQP値から調整される、を行うように構成され得る。
[0173]一例では、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして符号化されることに基づいて、デルタQP値が、パレットコード化ブロックを含む現在の量子化グループのために前に決定されていなかった場合、ビデオエンコーダ20は、パレットコード化ブロックのパレットQP値を決定し、パレットQP値と予測されたQP値との間の差分としてパレットデルタQP値を決定し、およびパレットデルタQP値を示す第2のシンタックス要素をビットストリームにおいて符号化し得る。ビデオエンコーダ20は、次いで、パレットQP値に従ってエスケープピクセルの色値を量子化し、ビットストリーム中にエスケープピクセルの量子化された色値を符号化し得る。パレットコード化ブロックのパレットQP値を決定するための技法が、図6に関してより詳細に説明される。
[0174]図3は、本開示の技法を実装するように構成された例示的なビデオデコーダ30を示すブロック図である。図3は、説明のために提供されるものであり、本開示において広く例示され説明される技法を限定するものではない。説明のために、本開示は、HEVCコーディングのコンテキストにおいてビデオデコーダ30を説明する。ただし、本開示の技法は、他のコーディング規格または方法に適用可能であり得る。
[0175]ビデオデコーダ30は、本開示で説明される様々な例に従ってパレットベースのビデオコーディングのための技法を実行するように構成され得る、デバイスの例を表す。たとえば、ビデオデコーダ30は、パレットベースのコーディングまたは非パレットベースのコーディングのいずれかを使用して、HEVCコーディングにおけるCUまたはPUのような、ビデオデータの様々なブロックを選択的に復号するように構成され得る。非パレットベースのコーディングモードは、HEVCバージョン1によって規定される様々なコーディングモードのような、様々なインター予測時間コーディングモードまたはイントラ予測空間コーディングモードを指すことがある。ビデオデコーダ30は、一例では、ピクセル値を示すエントリを有するパレットを生成し、ビデオデータのブロックの少なくともいくつかの位置をパレット中のエントリに関連付ける情報を受信し、情報に基づいてパレット中のピクセル値を選択し、選択されたピクセル値に基づいてブロックのピクセル値を再構築するように構成され得る。
[0176]図3の例では、ビデオデコーダ30は、ビデオデータメモリ148と、エントロピー復号ユニット150と、予測処理ユニット152と、逆量子化ユニット154と、逆変換処理ユニット156と、再構築ユニット158と、フィルタユニット160と、復号されたピクチャバッファ162とを含む。予測処理ユニット152は、動き補償ユニット164と、イントラ予測処理ユニット166とを含む。ビデオデコーダ30はまた、本開示で説明されるパレットベースのコーディング技法の様々な態様を実行するように構成された、パレットベースの復号ユニット165を含む。他の例では、ビデオデコーダ30は、より多いか、より少ないか、または異なる機能的な構成要素を含み得る。
[0177]ビデオデータメモリ148は、ビデオデコーダ30の構成要素によって復号されるべき、符号化されたビデオビットストリームなどのビデオデータを記憶し得る。ビデオデータメモリ148に記憶されるビデオデータは、たとえば、コンピュータ可読媒体16から、たとえば、カメラなどのローカルビデオソースから、ビデオデータのワイヤードもしくはワイヤレスネットワーク通信を介して、または物理データ記憶媒体にアクセスすることによって取得され得る。ビデオデータメモリ148は、符号化されたビデオビットストリームからの符号化されたビデオデータを記憶する、コード化ピクチャバッファ(CPB)を形成し得る。復号されたピクチャバッファ162は、たとえば、イントラコーディングモードまたはインターコーディングモードでビデオデコーダ30によってビデオデータを復号する際に使用するための参照ビデオデータを記憶する参照ピクチャメモリであり得る。ビデオデータメモリ148および復号されたピクチャバッファ162は、同期DRAM(SDRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、または他のタイプのメモリデバイスを含む、ダイナミックランダムアクセスメモリ(DRAM)のような様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ148および復号されたピクチャバッファ162は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ148は、ビデオデコーダ30の他の構成要素とともにオンチップであるか、またはそれらの構成要素に対してオフチップであり得る。
[0178]ビデオデータメモリ148、すなわちCPBは、ビットストリームの符号化されたビデオデータ(たとえば、NALユニット)を受信し、記憶し得る。エントロピー復号ユニット150は、ビデオデータメモリ148から符号化されたビデオデータ(たとえば、NALユニット)を受信し、シンタックス要素を復号するためにNALユニットを解析し得る。エントロピー復号ユニット150は、NALユニット中のエントロピー符号化されたシンタックス要素をエントロピー復号し得る。予測処理ユニット152、逆量子化ユニット154、逆変換処理ユニット156、再構築ユニット158、およびフィルタユニット160は、ビットストリームから抽出されたシンタックス要素に基づいて復号されたビデオデータを生成し得る。
[0179]ビットストリームのNALユニットは、コーディングされたスライスNALユニットを含み得る。ビットストリームを復号することの一部として、エントロピー復号ユニット150は、コード化スライスNALユニットからシンタックス要素を抽出し、エントロピー復号し得る。コード化スライスの各々は、スライスヘッダとスライスデータとを含み得る。スライスヘッダは、スライスに関係するシンタックス要素を含み得る。スライスヘッダ中のシンタックス要素は、スライスを含むピクチャに関連するPPSを特定するシンタックス要素を含み得る。
[0180]ビデオデコーダ30は、ビットストリームからのシンタックス要素を復号することに加えて、区分されていないCUに対して再構築動作を実行し得る。区分されていないCUに対して再構築動作を実行するために、ビデオデコーダ30は、CUの各TUに対して再構築動作を実行し得る。CUの各TUに対して再構築動作を実行することによって、ビデオデコーダ30はCUの残差ブロックを再構築し得る。
[0181]CUのTUに対して再構築動作を実行することの一部として、逆量子化ユニット154は、TUに関連する係数ブロックを逆量子化(inverse quantize)、すなわち逆量子化し(de-quantize)得る。逆量子化ユニット154は、量子化の程度を決定するために、また同様に、逆量子化ユニット154が適用すべき逆量子化の程度を決定するために、TUのCUに関連するQP値を使用し得る。すなわち、圧縮比、すなわち、元のシーケンスと圧縮されたシーケンスとを表すために使用されるビット数の比は、変換係数を量子化するときに使用されるQPの値を調整することによって制御され得る。圧縮比はまた、利用されるエントロピーコーディングの方法に依存し得る。
[0182]逆量子化ユニット154が係数ブロックを逆量子化した後、逆変換処理ユニット156は、TUに関連する残差ブロックを生成するために、係数ブロックに1つまたは複数の逆変換を適用し得る。たとえば、逆変換処理ユニット156は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を、係数ブロックに適用し得る。
[0183]イントラ予測を使用してPUが符号化される場合、イントラ予測処理ユニット166は、PUの予測ブロックを生成するためにイントラ予測を実行し得る。イントラ予測処理ユニット166は、空間的に隣接するPUの予測ブロックに基づいて、PUのための予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成するために、イントラ予測モードを使用し得る。イントラ予測処理ユニット166は、ビットストリームから復号された1つまたは複数のシンタックス要素に基づいて、PUのためのイントラ予測モードを決定し得る。
[0184]予測処理ユニット152は、ビットストリームから抽出されたシンタックス要素に基づいて、第1の参照ピクチャリスト(RefPicList0)と第2の参照ピクチャリスト(RefPicList1)とを構築し得る。さらに、PUがインター予測を使用して符号化された場合、エントロピー復号ユニット150は、PUについての動き情報を抽出し得る。動き補償ユニット164は、PUの動き情報に基づいて、PUのための1つまたは複数の参照領域を決定し得る。動き補償ユニット164は、PUの1つまたは複数の参照ブロックにおけるサンプルブロックに基づいて、PUの予測ルーマブロックと、予測Cbブロックと、予測Crブロックとを生成し得る。
[0185]再構築ユニット158は、CUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを再構築するために、CUのTUに関連するルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロック、ならびにCUのPUの予測ルーマブロック、予測Cbブロック、および予測Crブロックを、すなわち、イントラ予測データまたはインター予測データのいずれかを適宜使用し得る。たとえば、再構築ユニット158は、CUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを再構築するために、ルーマ変換ブロック、Cb変換ブロック、およびCr変換ブロックのサンプルを予測ルーマブロック、予測Cbブロック、および予測Crブロックの対応するサンプルに加算し得る。
[0186]フィルタユニット160は、CUのルーマコーディングブロック、Cbコーディングブロック、およびCrコーディングブロックに関連するブロッキングアーティファクトを低減するために、デブロッキング動作を実行し得る。ビデオデコーダ30は、復号されたピクチャバッファ162中にCUのルーマコーディングブロックと、Cbコーディングブロックと、Crコーディングブロックとを記憶し得る。復号されたピクチャバッファ162は、後続の動き補償、イントラ予測、および図1のディスプレイデバイス32などのディスプレイデバイス上での提示のために参照ピクチャを与え得る。たとえば、ビデオデコーダ30は、復号されたピクチャバッファ162中のルーマブロック、Cbブロック、およびCrブロックに基づいて、他のCUのPUに対してイントラ予測演算またはインター予測演算を実行し得る。このようにして、ビデオデコーダ30は、有意ルーマ係数ブロック(significant luma coefficient block)の変換係数レベルをビットストリームから抽出し、変換係数レベルを逆量子化し、変換ブロックを生成するために変換係数レベルに変換を適用し、変換ブロックに少なくとも部分的に基づいてコーディングブロックを生成し、コーディングブロックを表示のために出力し得る。
[0187]本開示の様々な例によれば、ビデオデコーダ30は、パレットベースのコーディングを実行するように構成され得る。パレットベースの復号ユニット165は、たとえば、パレットベースの復号モードがたとえばCUまたはPUのために選択されるとき、パレットベースの復号を実行し得る。たとえば、パレットベースの復号ユニット165は、ピクセル値を示すエントリを有するパレットを生成し、ビデオデータのブロック中の少なくともいくつかのピクセルロケーションをパレット中のエントリに関連付ける情報を受信し、情報に基づいてパレット中のピクセル値を選択し、パレット中の選択されたピクセル値に基づいてブロックのピクセル値を再構築するように構成され得る。様々な機能がパレットベースの復号ユニット165によって実行されるものとして説明されるが、そのような機能のいくつかまたはすべては、他の処理ユニット、または異なる処理ユニットの組合せによって実行され得る。
[0188]本開示の技法によれば、ビデオデコーダ30は、復号されたピクチャバッファ162中に再構築されたブロックを記憶するか、または表示のために再構築されたブロックを出力するより前にフィルタユニット160によって再構築されたパレットコード化ブロックのピクセルのためのループ内フィルタ処理(たとえば、デブロッキングフィルタ処理および/またはSAOフィルタ処理)の設計および適用を決定するように構成され得る。より詳細には、ビデオデコーダ30のパレットベースの復号ユニット165は、少なくとも1つのパレットコード化ブロックによって形成されるブロック境界に沿ったピクセルのためのフィルタユニット160によるデブロッキングフィルタ処理の適用を決定するように構成され得る。たとえば、ビデオデータの第1のブロックがパレットコード化ブロックであることに基づいて、パレットベースの復号ユニット165は、ビデオデータの再構築された第1のブロックと再構築された第2のブロックとの間に形成されるブロック境界において第1のブロックの再構築されたバージョン内のピクセルのためのフィルタユニット160によるデブロッキングフィルタ処理を無効化し得る。パレットベースの復号ユニット165はまた、再構築された第1のブロックと再構築された第2のブロックとの間に形成されるブロック境界において再構築された第2のブロック内のピクセルのためのフィルタユニット160によるデブロッキングフィルタ処理を適用すべきか否かを決定し得る。パレットコード化ブロックのデブロッキングフィルタ処理の適用を決定するための技法が、図4および図5に関してより詳細に説明される。
[0189]本開示の技法にさらによれば、ビデオデコーダ30は、パレットコード化ブロックのエスケープピクセル値を量子化するために逆量子化ユニット154によって使用されるQP値とデルタQP値とを決定するように構成され得る。たとえば、ビデオデコーダ30は、パレットコード化ブロック内の少なくとも1つのピクセルがパレットコード化ブロックのためのパレット中に含まれない色値を有するエスケープピクセルとして復号されるべきであるかどうかを示す受信されたビットストリームから第1のシンタックス要素を復号するように構成され得る。ビデオデコーダ30は、さらに、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、パレットコード化ブロックのパレットQP値を決定すること、パレットQP値は、予測されたQP値から調整される、を行うように構成され得る。
[0190]一例では、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、デルタQP値が、パレットコード化ブロックを含む現在の量子化グループのために前に決定されていなかった場合、ビデオデコーダ30は、受信されたビットストリームから、パレットコード化ブロックのパレットデルタQP値を示す第2のシンタックス要素を復号し、パレットコード化ブロックのパレットQP値を決定するためにパレットデルタQP値に基づいて予測されたQP値を調整し得る。ビデオデコーダ30は、次いで、受信されたビットストリームからエスケープピクセルの量子化された色値を復号し、パレットQP値に従ってエスケープピクセルの色値を逆量子化し得る。パレットコード化ブロックのパレットQP値を決定するための技法が、図6に関してより詳細に説明される。
[0191]図5は、少なくとも1つのパレットコード化ブロックによって形成されるブロック境界に沿ったピクセルにデブロッキングフィルタ処理を適用すべきかどうかを決定するビデオコーダの例示的な動作を示すフローチャートである。図5の例示的な動作が、図4からの第1のブロック170と第2のブロック172との間に形成されるブロック境界174に沿ったピクセルにデブロッキングフィルタ処理を適用することに関して説明される。図5に示される例示的な動作は、図2からのビデオエンコーダ20または図3からのビデオデコーダ30のいずれかによって実行され得る。
[0192]図5の例示的な動作は、最初に、ビデオデコーダ30に関して説明される。ビデオデコーダ30は、ビデオエンコーダ20などのビデオエンコーダから符号化されたビットストリームを受信する。符号化されたビットストリームは、少なくとも1つのピクチャについてのビデオデータの符号化されたブロックの表現と、ビデオデータに関連する1つまたは複数のシンタックス要素とを含む。ビデオデコーダ30は、復号されるべきビデオデータの第1のブロック170がパレットコード化ブロックであると決定する(200)。いくつかの例では、ビデオデコーダ30は、ビデオデータの各ブロックがパレットコード化ブロックであるか否かを示す少なくとも1つのシンタックス要素(たとえば、フラグ)をビットストリームにおいて受信し得る。他の例では、ビデオデコーダ30は、ビデオデータの各ブロックをコーディングするために使用されるコーディングのタイプ、たとえば、各ブロックが、パレットコード化ブロックであるのか、インターコード化ブロックであるのか、またはイントラコード化ブロックであるのかなどを示す1つまたは複数のシンタックス要素を受信し得る。
[0193]第1のブロック170がパレットコード化ブロックであるとき、ビデオデコーダ30のパレットベースの復号ユニット165は、第1のブロック170のためのパレットを決定する(202)。第1のブロック170のためのパレットは、1つまたは複数のそれぞれの色値を示す0個以上のパレットエントリを含む。上記でより詳細に説明されたように、パレット中に含まれるそれぞれの色値は、第1のブロック170中で最も頻繁に現れる主要な色値であり得る。パレットベースの復号ユニット165は、符号化されたビットストリーム中で受信されたパレットサイズとパレットエントリとに従ってパレットを決定し得る。パレットベースの復号ユニット165は、次いで、パレットに関して第1のブロック170のピクセルの色値を決定する(204)。
[0194]パレットが、0個のパレットエントリを含む場合、第1のブロック170内のピクセルのすべてが、パレット中に含まれない色値を有するエスケープピクセルとして復号されるべきであり、パレットベースの復号ユニット165は、符号化されたビットストリーム中において受信されたエスケープピクセルの色値を決定する。パレットが、1つまたは複数のパレットエントリを含む場合、パレットベースの復号ユニット165は、符号化されたビットストリームにおいて受信された第1のブロック170内の1つまたは複数のピクセルのインデックス値を決定し、インデックス値の各々は、第1のブロック170内のピクセルのうちの1つのピクセルの色値を示すパレットエントリのうちの1つに対応し、エスケープピクセルとして復号される第1のブロック内のピクセルのいずれかのピクセルの色値を決定する。
[0195]ビデオデコーダ30は、第1のブロック170のための決定されたパレットと決定された色値とに基づいて、ビデオデータの第1のブロック170を再構築する(206)。ビデオデコーダ30は、次いで、復号されたピクチャバッファ162中に再構築された第1のブロック170のビデオデータを記憶し、その後、表示のために再構築された第1のブロック170のビデオデータを出力し得る。
[0196]従来、パレットコード化ブロックは、インターコード化ブロックと同様に扱われており、したがって、復号されたピクチャバッファ中に記憶されるか、または表示のために出力されるより前に、フィルタ処理が、再構築ブロックに自動的に適用された。開示される技法によれば、パレットコード化ブロックは、代わりに、デブロッキングフィルタ処理のためにロスレスコード化ブロックと同様の方式で扱われる。言い換えれば、開示される技法は、パレットコード化ブロック内のピクセルのためのデブロッキングフィルタ処理を無効化することを含む。
[0197]第1のブロック170がパレットコード化ブロックであることに基づいて、パレットベースの復号ユニット165は、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174において再構築された第1のブロック170内の第1のピクセルのためのデブロッキングフィルタ処理を無効化する(208)。このようにして、再構築された第1のブロック170を記憶または出力するより前に、再構築された第1のブロック170中の第1のピクセルにデブロッキングフィルタ処理が適用されないことがある。
[0198]再構築された第1のブロック170と再構築された第2のブロック172とがルーマブロックを備える場合、パレットベースの復号ユニット165は、次のように、再構築された第1のブロック170内の第1のルーマピクセルのためのデブロッキングフィルタ処理を無効化し得る。パレットベースの復号ユニット165は、最初に、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174のためにデブロッキングフィルタ処理が有効化されるかどうかを決定し得る。この決定は、ブロック境界174が、PU境界またはTU境界であることと、ブロック境界174の境界強度値が0よりも大きいことと、ブロック境界174の両サイドに沿った第1のルーマピクセルと第2のルーマピクセルとの変動がしきい値を下回ることとに基づき得る。
[0199]デブロッキングフィルタ処理がブロック境界174のために有効化されることに基づいて、パレットベースの復号ユニット165は、次いで、デブロッキングフィルタ処理されるべき再構築された第1のブロック170内の第1のルーマピクセルの数を決定し得る。デブロッキングフィルタ処理されるべき第1のルーマピクセルの数は、第1のルーマピクセルに強いデブロッキングフィルタ処理が適用されるべきであるのか、または通常のデブロッキングフィルタ処理が適用されるべきであるのかと、通常のデブロッキングフィルタ処理の場合、第1のルーマピクセルに適用されるべき通常のデブロッキングフィルタ処理の強度とに依存し得る。デブロッキングフィルタ処理されるべき第1のルーマピクセルの数が0よりも大きいことに基づいて、および第1のブロック170がパレットコード化ブロックであることに基づいて、パレットベースの復号ユニット165は、再構築された第1のブロック170内の第1のルーマピクセルのためのデブロッキングフィルタ処理を無効化するために、デブロッキングフィルタ処理されるべき第1のルーマピクセルの数を0に等しく設定し得る。これは、開示される技法に従って、パレットコード化ブロックがデブロッキングフィルタ処理のためにロスレスコード化ブロックと同様に扱われるように、HEVCバージョン1においてロスレスコード化ブロックのルーマサンプルのためにデブロッキングフィルタ処理が無効化される方法と同様である。
[0200]再構築された第1のブロック170と再構築された第2のブロック172とがクロマブロックを備える場合、パレットベースの復号ユニット165は、次のように、再構築された第1のブロック170内の第1のクロマピクセルのためのデブロッキングフィルタ処理を無効化し得る。パレットベースの復号ユニット165は、最初に、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174のためにデブロッキングフィルタ処理が有効化されるかどうかを決定し得る。この決定は、ブロック境界174の境界強度値が2に等しくなることに基づき得る。デブロッキングフィルタ処理がブロック境界174のために有効化されることに基づいて、パレットベースの復号ユニット165は、次いで、再構築された第1のブロック170内の第1のクロマピクセルのうちの1つまたは複数のクロマピクセルのデブロッキングフィルタ処理された値を決定し得る。第1のブロック170がパレットコード化ブロックであることに基づいて、パレットベースの復号ユニット165は、再構築された第1のブロック170内の第1のクロマピクセルのためのデブロッキングフィルタ処理を無効化するために、第1のクロマピクセルのうちの1つまたは複数のクロマピクセルのデブロッキングフィルタ処理された値を、第1のクロマピクセルのうちの1つまたは複数のクロマピクセルの元の値に等しくなるように設定し得る。これは、開示される技法に従って、パレットコード化ブロックがデブロッキングフィルタ処理のためにロスレスコード化ブロックと同様に扱われるように、HEVCバージョン1においてロスレスコード化ブロックのクロマサンプルのためにデブロッキングフィルタ処理が無効化される方法と同様である。
[0201]さらに、パレットベースの復号ユニット165は、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174において、再構築された第2のブロック172内の第2のピクセルのためのデブロッキングフィルタ処理を適用すべきかどうかを決定する(210)。一例では、パレットベースの復号ユニット165は、第2のブロック172もパレットコード化ブロックであることを決定し得る。第2のブロック172を再構築した後に、第2のブロック172がパレットコード化ブロックであることに基づいて、パレットベースの復号ユニット165は、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174において、再構築された第2のブロック172内の第2のピクセルのためのデブロッキングフィルタ処理を無効化する。このようにして、再構築された第2のブロック172を記憶または出力するより前に、再構築された第2のブロック172中の第2のピクセルにデブロッキングフィルタ処理が適用されないことがある。
[0202]別の例では、パレットベースの復号ユニット165は、第2のブロック172がパレットコード化ブロックではないが、インターコード化ブロックまたはイントラコード化ブロックなどであると決定し得る。第2のブロック172を再構築した後に、パレットベースの復号ユニット165は、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174のためにデブロッキングフィルタ処理が有効化されるかどうかを決定する。デブロッキングフィルタ処理がブロック境界174のために有効化されることに基づいて、パレットベースの復号ユニット165は、再構築された第2のブロック172内の第2のピクセルのためのデブロッキングフィルタ処理のタイプを決定し、再構築された第1のブロック170内の第1のピクセルにデブロッキングフィルタ処理を適用することなしに、再構築された第2のブロック172内の第2のピクセルのうちの1つまたは複数にデブロッキングフィルタ処理の決定されたタイプを適用する。このようにして、再構築された第2のブロック172を記憶または出力するより前に、再構築された第2のブロック172中の第2のピクセルにデブロッキングフィルタ処理が適用され得る。
[0203]図5の例示的な動作が、次に、ビデオエンコーダ20に関して説明される。ビデオエンコーダ20は、ビデオデータの第1のブロック170がパレットコード化ブロックとして符号化されるべきであると決定する(200)。いくつかの例では、ビデオエンコーダ20は、ビデオデータの各ブロックがパレットコード化ブロックであるか否かを示す少なくとも1つのシンタックス要素(たとえば、フラグ)を符号化されたビットストリーム中でシグナリングし得る。他の例では、ビデオエンコーダ20は、ビデオデータの各ブロックをコーディングするために使用されるコーディングのタイプ、たとえば、各ブロックがパレットコード化ブロックであるのか、インターコード化ブロックであるのか、またはイントラコード化ブロックであるのかなどを示す1つまたは複数のシンタックス要素を符号化されたビットストリーム中でシグナリングし得る。
[0204]第1のブロック170がパレットコード化ブロックとして符号化されるべきであるとき、ビデオエンコーダ20のパレットベースの符号化ユニット122は、第1のブロック170のためのパレットを決定する(202)。第1のブロック170のためのパレットは、1つまたは複数のそれぞれの色値を示す0個以上のパレットエントリを含む。上記でより詳細に説明されたように、パレット中に含まれるそれぞれの色値は、第1のブロック170中で最も頻繁に現れる主要な色値であり得る。パレットベースの符号化ユニット122は、ピクセル値クラスタリング方法を使用してパレットのパレットサイズとパレットエントリとを決定し得る。
[0205]パレットを決定した後に、パレットベースの符号化ユニット122は、パレットに関して第1のブロック170のピクセルの色値を決定する(204)。パレットが、0個のパレットエントリを含む場合、第1のブロック170内のピクセルのすべてが、パレット中に含まれない色値を有するエスケープピクセルとして符号化され、パレットベースの符号化ユニット122は、符号化されたビットストリーム中にエスケープピクセルを符号化する。パレットが、1つまたは複数のパレットエントリを含む場合、パレットベースの符号化ユニット122は、符号化されたビットストリーム中に第1のブロック170内の1つまたは複数のピクセルのインデックス値を符号化し、インデックス値の各々は、第1のブロック170内のピクセルのうちの1つのピクセルの色値を示すパレットエントリのうちの1つに対応し、エスケープピクセルとして符号化される第1のブロック内のピクセルのいずれかのピクセルの色値を符号化する。
[0206]ビデオエンコーダ20は、ビデオデコーダ30などのビデオデコーダに、符号化されたビットストリーム中で第1のブロック170のためのパレットと色値とをシグナリングし得る。ビデオエンコーダ20は、次いで、復号ループにおいて、第1のブロック170のための決定されたパレットと決定された色値とに基づいてビデオデータの第1のブロック170を再構築する(206)。ビデオエンコーダ20は、次いで、復号されたピクチャバッファ116中に再構築された第1のブロック170のビデオデータを記憶し得る。
[0207]開示される技法によれば、第1のブロック170がパレットコード化ブロックであることに基づいて、パレットベースの符号化ユニット122は、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174において再構築された第1のブロック170内の第1のピクセルのためのデブロッキングフィルタ処理を無効化する(208)。このようにして、復号されたピクチャバッファ116中に再構築された第1のブロック170を記憶するより前に、再構築された第1のブロック170中の第1のピクセルにデブロッキングフィルタ処理が適用されないことがある。さらに、パレットベースの符号化ユニット122は、再構築された第1のブロック170と再構築された第2のブロック172との間に形成されるブロック境界174において、再構築された第2のブロック172内の第2のピクセルのためのデブロッキングフィルタ処理を適用すべきかどうかを決定する(210)。この決定は、第2のブロック172が、パレットコード化ブロックであるのか、インターコード化ブロックであるのか、イントラコード化ブロックであるのかなどに少なくとも部分的に基づき得る。
[0208]図6は、パレットコード化ブロックのエスケープピクセル値を量子化するために使用されるパレットQP値を決定するビデオコーダの例示的な動作を示すフローチャートである。図5に示される例示的な動作は、図2からのビデオエンコーダ20または図3からのビデオデコーダ30のいずれかによって実行され得る。
[0209]図6の例示的な動作は、最初に、ビデオデコーダ30に関して説明される。ビデオデコーダ30は、ビデオエンコーダ20などのビデオエンコーダから符号化されたビットストリームを受信する。符号化されたビットストリームは、少なくとも1つのピクチャについてのビデオデータの符号化されたブロックの表現と、ビデオデータに関連する1つまたは複数のシンタックス要素とを含む。いくつかの例では、ビデオデコーダ30は、ビデオデータの各ブロックがパレットコード化ブロックであるか否かを示す少なくとも1つのシンタックス要素(たとえば、フラグ)をビットストリームにおいて受信し得る。他の例では、ビデオデコーダ30は、ビデオデータの各ブロックをコーディングするために使用されるコーディングのタイプ、たとえば、各ブロックがパレットコード化ブロックであるのか、インターコード化ブロックであるのか、またはイントラコード化ブロックであるのかなどを示す1つまたは複数のシンタックス要素を受信し得る。
[0210]復号されるべき現在のブロックがパレットコード化ブロックであるとき、ビデオデコーダ30のパレットベースの復号ユニット165は、パレットコード化ブロックのためのパレットを決定し、ここで、パレットは、1つまたは複数のそれぞれの色値を示す0個以上のパレットエントリを含む(220)。パレットベースの復号ユニット165は、パレットコード化ブロック内の少なくとも1つのピクセルがパレット中に含まれない色値を有するエスケープピクセルとして復号されるべきかどうかを決定する(224)。いくつかの例では、ビデオデコーダ30は、パレットコード化ブロックが少なくとも1つのエスケープピクセルを含むか否かを示す少なくとも1つのシンタックス要素(たとえば、フラグ)をビットストリームにおいてCUレベルで受信し得る。他の例では、ビデオデコーダ30は、ピクセルがパレットに基づいて復号されるべきであるのか、またはエスケープピクセルとして復号されるべきであるかを示すシンタックス要素(たとえば、フラグ)をパレットコード化ブロック内のピクセルごとに受信し得る。
[0211]いくつかの例では、ビデオデコーダ30はまた、スライスレベルのQP値を示すシンタックス要素をビットストリームにおいて受信し得る。スライスレベルのQP値は、HEVCバージョン1においてスライス内のブロックを量子化するために使用されるQP値である。非パレットコード化ブロックの場合、スライスレベルのQP値は、CUごとに1回または複数のCUを含む量子化グループごとに1回シグナリングされ得るデルタQP値に基づいて調整され得る。デルタQPは、非パレットコード化ブロックが少なくとも1つの非ゼロ係数を含む場合に所与の非パレットコード化ブロックのためにシグナリングされ得る。従来、パレットベースのコーディングモードは、CUごとにまたは量子化グループごとにスライスレベルのQP値を調整するための機構を含まず、したがって、ビデオデコーダ30は、パレットコード化ブロックのエスケープピクセル値を逆量子化するために一定のQPで動作しなければならない。
[0212]本開示の技法によれば、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、ビデオデコーダ30は、パレットコード化ブロックのパレットQP値を決定し、パレットQP値は、予測されたQP値から調整される(226)。パレットコード化ブロックは、他のパレットコード化ブロックと非パレットコード化ブロックとを含む1つまたは複数の他のブロックを含み得る現在の量子化グループ中に含まれ得る。いくつかの例では、パレットQP値を決定するために調整される予測されたQP値は、スライスレベルのQP値であり得る。他の例では、パレットQP値を決定するために調整される予測されたQP値は、前の量子化グループ中に含まれるブロックに関連付けられるQP値であり得る。本開示では、主に、単数のパレットQP値として説明されるが、パレットQP値は、ルーマパレットQP値と少なくとも1つのクロマパレットQP値とを含み得る。たとえば、パレットQP値は、パレットQPY値と、パレットQPCb値と、パレットQPCr値とを含み得る。
[0213]一例では、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、ビデオデコーダ30は、パレットコード化ブロックを含む現在の量子化グループのデルタQP値を決定し、パレットコード化ブロックのパレットQP値を決定するためにデルタQP値に基づいて予測されたQP値を調整し得る。
[0214]場合によっては、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、デルタQP値が、パレットコード化ブロックをも含む現在の量子化グループ中に含まれるブロックのために前に決定されていなかった場合、ビデオデコーダ30は、パレットコード化ブロックのパレットデルタQP値を示すシンタックス要素を受信し、パレットコード化ブロックのパレットQP値を決定するためにパレットデルタQP値に基づいて予測されたQP値を調整し得る。他の場合には、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、デルタQP値が、現在の量子化グループ中に含まれるブロックのために前に決定されていた場合、ビデオデコーダ30は、パレットコード化ブロックのデルタQP値を受信することなしにパレットコード化ブロックのパレットQP値を決定するために前に決定されたデルタQP値に基づいて予測されたQP値を調整し得る。
[0215]いくつかの例では、ビデオデコーダ30は、デルタQP値がパレットコード化ブロックのために有効化される場合のみ、パレットコード化ブロックのパレットデルタQP値を示すシンタックス要素を受信し得る。たとえば、ビデオデコーダ30は、SPS、VPS、PPSまたはスライスヘッダのうちの1つ中で、デルタQP値がパレットコード化ブロックのためにCUレベルでシグナリングされるかどうかを示すシンタックス要素を受信し得る。
[0216]上記の例は、エスケープピクセルとして復号されるルーマピクセルを量子化するために使用されるルーマパレットQP値を決定するために使用され得る。さらに、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、ビデオデコーダ30は、パレットコード化ブロックを含む現在の量子化グループのクロマQPオフセット値を決定し、パレットコード化ブロックのクロマパレットQP値を決定するためにクロマQPオフセット値に基づいてパレットコード化ブロックのために決定されたルーマパレットQP値を調整し得る。
[0217]場合によっては、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、クロマQPオフセット値が、パレットコード化ブロックをも含む現在の量子化グループ中に含まれるブロックのために前に決定されていなかった場合、ビデオデコーダ30は、パレットコード化ブロックのパレットクロマQPオフセット値を示すシンタックス要素を受信し、パレットコード化ブロックのクロマパレットQP値を決定するためにパレットクロマQPオフセット値に基づいてルーマパレットQP値を調整し得る。他の場合には、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、クロマQPオフセット値が、現在の量子化グループ中に含まれるブロックのために前に決定されていた場合、ビデオデコーダ30は、パレットコード化ブロックのクロマQPオフセット値を受信することなしにパレットコード化ブロックのクロマパレットQP値を決定するために前に決定されたクロマQPオフセット値に基づいてルーマパレットQP値を調整し得る。
[0218]いくつかの例では、ビデオデコーダ30は、クロマQPオフセット値がパレットコード化ブロックのために有効化される場合のみ、パレットコード化ブロックのパレットクロマQPオフセット値を示すシンタックス要素を受信し得る。たとえば、ビデオデコーダ30は、SPS、VPS、PPSまたはスライスヘッダのうちの1つ中で、クロマQPオフセット値がパレットコード化ブロックのためにCUレベルでシグナリングされるかどうかを示すシンタックス要素を受信し得る。
[0219]別の例として、パレットコード化ブロックのパレットQP値を決定するために、ビデオデコーダ30は、パレットコード化ブロックが現在の量子化グループ中の第1のブロックであるかどうかを決定すること、または現在の量子化グループ中のいずれかの前の非パレットコード化ブロックが非0係数を含むかどうかを決定することを行うように構成され得る。パレットコード化ブロックが、現在の量子化グループ中の第1のブロックであること、または現在の量子化グループ中の前の非パレットコード化ブロックのいずれも非0係数を含まないことに基づいて、ビデオデコーダ30は、予測されたQP値から調整される、ルーマおよびクロマQP値を含むパレットQP値を決定し得る。代替的に、パレットコード化ブロックが、現在の量子化グループ中の第1のブロックではないことと、現在の量子化グループ中の前の非パレットコード化ブロックのうちの少なくとも1つが非0係数を含むこととに基づいて、ビデオデコーダ30は、現在の量子化グループ中の少なくとも1つの前の非パレットコード化ブロックのために前に決定された、ルーマQP値とクロマQP値とを含む量子化グループQP値にパレットQP値が等しくなると決定し得る。
[0220]さらに、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして復号されることに基づいて、およびパレットコード化ブロックのパレットQP値を決定すると、ビデオデコーダ30は、パレット中に含まれないエスケープピクセルの色値を決定し、パレットQP値に従ってエスケープピクセルの色値を量子化する(228)。より詳細には、ビデオデコーダ30は、受信されたビットストリームから、エスケープピクセルの量子化された色値を復号し、パレットQP値に従ってエスケープピクセルの色値を逆量子化する。
[0221]ビデオデコーダ30は、次いで、決定されたパレットと、決定されたインデックス値と、パレットコード化ブロックのためのエスケープピクセルの逆量子化された色値とに基づいてビデオデータのパレットコード化ブロックを再構築する。たとえば、ビデオデコーダ30は、パレットコード化ブロックのピクセル値を再構築するために、決定されたインデックス値をパレットのエントリにマッピングし得る。ビデオデコーダ30は、次いで、復号されたピクチャバッファ162中に再構築されたパレットコード化ブロックのビデオデータを記憶し、その後、表示のために再構築されたパレットコード化ブロックのビデオデータを出力し得る。
[0222]図6の例示的な動作は、次に、ビデオエンコーダ20に関して説明される。ビデオエンコーダ20は、ビデオデータの各ブロックがパレットコード化ブロックであるか否かを示す少なくとも1つのシンタックス要素(たとえば、フラグ)を符号化されたビットストリームにおいてシグナリングし得る。他の例では、ビデオエンコーダ20は、ビデオデータの各ブロックをコーディングするために使用されるコーディングのタイプ、たとえば、各ブロックがパレットコード化ブロックであるのか、インターコード化ブロックであるのか、またはイントラコード化ブロックであるのかなどを示す1つまたは複数のシンタックス要素を符号化されたビットストリームにおいてシグナリングし得る。
[0223]現在のブロックがパレットコード化ブロックとして符号化されるべきであるとき、ビデオエンコーダ20のパレットベースの符号化ユニット122は、パレットコード化ブロックのためのパレットを決定し、ここで、パレットは、1つまたは複数のそれぞれの色値を示す0個以上のパレットエントリを含む(220)。パレットベースの符号化ユニット122は、パレットコード化ブロック内の少なくとも1つのピクセルがパレット中に含まれない色値を有するエスケープピクセルとして符号化されるかどうかを決定する(224)。いくつかの例では、ビデオエンコーダ20は、パレットコード化ブロックが少なくとも1つのエスケープピクセルを含むか否かを示す少なくとも1つのシンタックス要素(たとえば、フラグ)をビットストリームにおいてCUレベルでシグナリングし得る。他の例では、ビデオエンコーダ20は、ピクセルがパレットに基づいて符号化されるのか、またはエスケープピクセルとして符号化されるのかを示すシンタックス要素(たとえば、フラグ)をパレットコード化ブロック内のピクセルごとにシグナリングし得る。いくつかの例では、ビデオエンコーダ20はまた、スライスレベルのQP値を示すシンタックス要素をビットストリームにおいてシグナリングし得る。
[0224]本開示の技法によれば、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして符号化されることに基づいて、ビデオエンコーダ20は、パレットコード化ブロックのパレットQP値を決定し、パレットQP値は、予測されたQP値から調整される(226)。パレットコード化ブロックは、他のパレットコード化ブロックと非パレットコード化ブロックとを含む1つまたは複数の他のブロックを含み得る現在の量子化グループ中に含まれ得る。パレットQP値を決定するために調整される予測されたQP値は、スライスレベルのQP値または前の量子化グループ中に含まれるブロックに関連付けられるQP値であり得る。パレットQP値は、ルーマパレットQP値と少なくとも1つのクロマパレットQP値とを含み得る。
[0225]一例では、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして符号化されることに基づいて、ビデオエンコーダ20は、パレットコード化ブロックを含む現在の量子化グループのデルタQP値を決定し、パレットコード化ブロックのパレットQP値を決定するためにデルタQP値に基づいて予測されたQP値を調整し得る。
[0226]場合によっては、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして符号化されることに基づいて、デルタQP値が、パレットコード化ブロックをも含む現在の量子化グループ中に含まれるブロックのために前に決定されていなかった場合、ビデオエンコーダ20は、パレットコード化ブロックのパレットQP値を決定し、パレットQP値と予測されたQP値との間の差分としてパレットデルタQP値を決定し、パレットコード化ブロックのパレットデルタQP値を示すシンタックス要素をシグナリングし得る。他の場合には、パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして符号化されることに基づいて、デルタQP値が、現在の量子化グループ中に含まれるブロックのために前に決定されていた場合、ビデオエンコーダ20は、パレットコード化ブロックのデルタQP値をシグナリングすることなしにパレットコード化ブロックのパレットQP値を決定するために前に決定されたデルタQP値に基づいて予測されたQP値を調整し得る。
[0227]別の例では、パレットコード化ブロックのパレットQP値を決定するために、ビデオエンコーダ20は、パレットコード化ブロックが現在の量子化グループ中の第1のブロックであるかどうかを決定すること、または現在の量子化グループ中のいずれかの前の非パレットコード化ブロックが非0係数を含むかどうかを決定することを行うように構成され得る。パレットコード化ブロックが、現在の量子化グループ中の第1のブロックであること、または現在の量子化グループ中の前の非パレットコード化ブロックのいずれも非0係数を含まないことに基づいて、ビデオエンコーダ20は、予測されたQP値から調整される、ルーマQP値およびクロマQP値を含むパレットQP値を決定し得る。代替的に、パレットコード化ブロックが、現在の量子化グループ中の第1のブロックでないことと、現在の量子化グループ中の前の非パレットコード化ブロックのうちの少なくとも1つが非0係数を含むこととに基づいて、ビデオエンコーダ20は、現在の量子化グループ中の少なくとも1つの前の非パレットコード化ブロックのために前に決定された、ルーマQP値とクロマQP値とを含む量子化グループQP値にパレットQP値が等しくなると決定し得る。
[0228]パレットコード化ブロック内の少なくとも1つのピクセルがエスケープピクセルとして符号化されることに基づいて、およびパレットコード化ブロックのパレットQP値を決定すると、ビデオエンコーダ20は、パレット中に含まれないエスケープピクセルの色値を決定し、パレットQP値に従ってエスケープピクセルの色値を量子化する(228)。より詳細には、ビデオエンコーダ20は、パレットQP値に従ってエスケープピクセルの色値を量子化し、ビットストリームにおいてエスケープピクセルの量子化された色値を符号化する。
[0229]ビデオエンコーダ20は、次いで、復号ループにおいて、決定されたパレットと、決定されたインデックス値と、パレットコード化ブロックのためのエスケープピクセルの逆量子化された色値とに基づいてビデオデータのパレットコード化ブロックを再構築する。たとえば、ビデオエンコーダ20は、パレットコード化ブロックのピクセル値を再構築するために、決定されたインデックス値をパレットのエントリにマッピングし得る。ビデオエンコーダ20は、次いで、復号されたピクチャバッファ116中に再構築されたパレットコード化ブロックのビデオデータを記憶し得る。
[0230]上記例に応じて、本明細書で説明された技法のいずれかのいくつかの動作またはイベントが、異なるシーケンスで実行され得、全体的に追加、マージ、または除外され得る(たとえば、すべての説明された動作またはイベントが本技法の実施のために必要であるとは限らない)ことを認識されたい。さらに、いくつかの例では、動作またはイベントは、順次にではなく、同時に、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通して実行され得る。さらに、本開示のいくつかの態様は、明快にするために単一のモジュールまたはユニットによって実行されるものとして説明されているが、本開示の技法はビデオコーダに関連するユニットまたはモジュールの組合せによって実行され得ることを理解されたい。
[0231]本開示のいくつかの態様は、説明のためにHEVCバージョン1ならびにHEVC SCC WD1.0およびWD2.0に関して説明された。ただし、本開示で説明される技法は、他の規格またはまだ開発されていないプロプライエタリなビデオコーディングプロセスを含む、他のビデオコーディングプロセスにとって有用であり得る。
[0232]上記で説明した技法は、その両方が一般にビデオコーダと呼ばれることがある、ビデオエンコーダ20(図1および図2)および/またはビデオデコーダ30(図1および図3)によって実行され得る。同様に、ビデオコーディングは、適用可能なとき、ビデオ符号化またはビデオ復号を指すことがある。
[0233]技法の様々な態様の特定の組合せが上で説明されたが、これらの組合せは、本開示で説明される技法の例を単に示すために与えられる。したがって、本開示の技法は、これらの例示的な組合せに限定されるべきではなく、本開示で説明される技法の様々な態様の任意の想起可能な組合せを包含し得る。
[0234]1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応する、コンピュータ可読記憶媒体を含み得るか、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む通信媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コードおよび/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品はコンピュータ可読媒体を含み得る。
[0235]限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM(登録商標)、CD−ROMもしくは他の光ディスクストレージ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る任意の他の媒体を備え得る。また、任意の接続がコンピュータ可読媒体と適切に呼ばれる。たとえば、命令が、ウェブサイト、サーバ、または他のリモートソースから、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。ただし、コンピュータ可読記憶媒体およびデータ記憶媒体は、接続、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体に向けられることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−rayディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0236]命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造、または、本明細書で説明された技法の実装に好適な任意の他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成されるか、または複合コーデックに組み込まれる、専用ハードウェアおよび/またはソフトウェアモジュール内で提供され得る。また、本技法は、1つまたは複数の回路または論理要素で十分に実装され得る。
[0237]本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置で実装され得る。様々な構成要素、モジュール、またはユニットは、開示された技法を実行するように構成されたデバイスの機能的態様を強調するように本開示において記載されているが、異なるハードウェアユニットによる実現を必ずしも必要としない。むしろ、上記で説明されたように、様々なユニットは、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わされるか、または相互動作ハードウェアユニットの集合によって提供され得る。
[0238]様々な例が説明された。これらおよび他の例は添付の特許請求の範囲内に入る。