より高解像度のビデオに対する要求が高まっているため、ビデオコーディング方法および技術は、現代の技術では至るところに存在している。ビデオコーデックは、典型的には、デジタルビデオを圧縮または解凍する電子回路またはソフトウェアを含み、より高いコーディング効率を提供するために絶えず改良されている。ビデオコーデックは、圧縮されていないビデオを圧縮形式に変換し、又はその逆を行う。ビデオ画質、(ビットレートによって決定される)ビデオを表現するために使用されるデータ量、符号化および復号アルゴリズムの複雑さ、データ損失およびエラーに対する感度、編集の容易さ、ランダムアクセス、およびエンドツーエンド遅延(レイテンシ)の間には複雑な関係がある。圧縮フォーマットは、通常、標準的なビデオ圧縮仕様、例えば、高効率ビデオコーディング(High Efficiency Video Coding、HEVC)標準(H.265またはMPEG-H Part 2としても知られている)、最終化される汎用ビデオコーディング(Versatile Video Coding)標準、または他の現在および/または将来のビデオコーディング標準に準拠する。
サブブロックベース予測は、高効率ビデオコーディング(HEVC)標準によってビデオコーディング標準に最初に導入された。サブブロックベース予測では、コーディングユニット(CU)または予測ユニット(PU)のようなブロックは、いくつかの重複しないサブブロックに分割される。異なるサブブロックには、参照インデックスまたは動きベクトル(MV)のような異なる動き情報が割り当てられ、動き補償(MC)は各サブブロックに対して個別に実行される。図1は、サブブロックベース予測の一例を示す。
開示の技術の実施形態は、ランタイム性能を改善するために、既存のビデオコーディング標準(例えば、HEVC、H.265)および将来の標準に適用され取得する。本文書では、セクション見出しは、説明の可読性を向上させるために使用しており、いかなる意味においても、説明または実施形態(および/または実装)を各セクションのみに限定するものではない。
JEM(Joint Exploration Model)として知られる参照ソフトウェアを用いて、将来のビデオコーディング技術を説明する。JEMでは、サブブロックベースの予測を、アフィン予測、代替時間動きベクトル予測(ATMVP)、空間時間動きベクトル予測(STMVP)、双方向オプティカルフロー(BIO)、フレームレートアップ変換(FRUC)、局所適応動きベクトル解像(LAMVR)、オーバーラップブロック動き補償(OBMC)、局所照明補償(LIC)、デコーダ側動きベクトル精緻化(DMVR)などのいくつかのコーディングツールに採用している。
HEVCでは、並進動きモデルのみが動き補償予測(MCP)に適用される。しかし、カメラおよびオブジェクトは、ズームイン/ズームアウト、回転、斜視的動き、および/または他の不規則な動きなど、多くの種類の動きを有し取得する。一方、JEMは単純化したアフィン変換動き補償予測を適用する。図2は、2つの制御点動きベクトルV0およびV1によって記述されるブロック200のアフィン動き場の例を示す。ブロック200の動きベクトル場(MVF)は、以下の式で表すことができる:
図3は、ブロック300に対するサブブロック当たりのアフィンMVFの例を示す。各M×Nサブブロックの動きベクトルを導出するために、各サブブロックの中心サンプルの動きベクトルを式(1)に従って計算し、動きベクトル分率精度に丸めることができる(例えば、JEMでは1/16)。次に、動き補償補間フィルタを適用して、導出された動きベクトルを有する各サブブロックの予測を生成することができる。MCPの後、各サブブロックの高精度動きベクトルを丸め、通常の動きベクトルと同じ精度で保存する。
JEMには、AF_INTERモードとAF_MERGEモードの2つのアフィン動きモードがある。幅と高さの両方が8より大きいCUに対して、AF_INTERモードが適用できる。CUレベルのアフィンフラグはAF_INTERモードが使われるかどうかを示すためにビットストリームでシグナリングされる。AF_INTERモードでは、動きベクトルペア{(v0,v1)|v0={vA,vB,vc},v1={vD,vE}}を持つ候補リストが隣接ブロックを使って構築される。
JEMでは、非マージアフィンモードは現在のブロックの幅と高さの両方が8より大きい場合にのみ使用でき、マージアフィンモードは現在のブロックの面積(すなわち幅×高さ)が64より小さくない場合にのみ使用できる。
図4は、CU400の代替時間動きベクトル予測(ATMVP)動き予測プロセスの例を示す。ATMVP法は、CU400内のサブCU401の動きベクトルを2ステップで予測する。第1のステップは、時間ベクトルを有する参照ピクチャ450内の対応するブロック451を特定することである。参照ピクチャ450は、動きソースピクチャとも呼ばれる。第2のステップは、現在のCU400をサブCU401に分割し、各サブCUに対応するブロックから各サブCUの動きベクトルおよび参照インデックスを取得する。
第1のステップでは、参照ピクチャ450と、対応するブロックとは、現在のCU400の空間的隣接ブロックの動き情報によって決定される。第2のステップでは、サブCU451の対応するブロックが、現在のCUの座標に時間ベクトルを加えることによって、動きソースピクチャ450内の時間ベクトルによって特定される。各サブCUに対して、対応するブロックの動き情報(例えば、中心サンプルをカバーする最小の動きグリッド)を用いて、サブCUの動き情報を導出する。対応するN×Nブロックの動き情報が特定された後、HEVCのTMVPと同様に、現在のサブCUの動きベクトルおよび参照インデックスに変換される。ここで、動きスケーリングおよびその他の手順が適用される。
空間時間動きベクトル予測(STMVP)法では、サブCUの動きベクトルはラスタ走査順序に従って再帰的に導出される。図5は、4つのサブブロックおよび隣接ブロックを有する1つのCUの例を示す。4×4のサブCU A(501)、B(502)、C(503)、D(504)の4つのサブCUを含む8×8CU500を考える。現在のフレーム内の隣接する4×4ブロックは、a(511)、b(512)、c(513)、d(514)とラベル付けされている。
サブCU Aの動き導出は、その2つの空間的隣接者を特定することから始まる。最初の隣接者はサブCU A501の上のN×Nブロック(ブロックc513)である。このブロックc(513)が利用できないか、またはイントラコーディングされている場合、サブCU A(501)の上の他のN×Nブロックがチェックされる(ブロックc513から始めて左から右へ)。第2の隣接者は、サブCU A501の左側のブロック(ブロックb512)である。ブロックb(512)が利用可能でないか、またはイントラコーディングされている場合、サブCU A501の左側にある他のブロックがチェックされる(ブロックb512から始めて上から下へ)。各リストに対する隣接ブロックから得られた動き情報は、与えられたリストに対する最初の参照フレームにスケーリングされる。次に、サブブロックA501の時間的動きベクトル予測子(TMVP)が、HEVCで規定されたのと同じTMVP導出手順に従うことによって導出される。ブロックD704でコロケーションされたブロックの動き情報は、適宜、フェッチされスケールされる。最後に、動き情報を読み出し、スケーリングした後、すべての利用可能な動きベクトルは、各参照リストに対して別々に平均化される。平均化された動きベクトルは、現在のサブCUの動きベクトルとして割り当てられる。
双方向オプティカルフロー(BIO)法は、双方向予測のためのブロックごとの動き補償の上で実施されるサンプルごとの動き微細化である。いくつかの実装では、サンプルレベルの動きの精緻化は、シグナリングを使用しない。
I(k)をブロック動き補償後の参照k(k=0,1)からのルミナンス値とし、∂I(k)/∂x,∂I(k)/∂yを、それぞれI(k)グラジエントの水平成分と垂直成分とする。オプティカルフローが有効であると仮定すると、動きベクトル場(vx、vy)は次式で与えられる:
このオプティカルフロー方程式を各サンプルの動き軌跡に対するエルミート補間と組み合わせると、両端において関数値I(k)と微分値∂I(k)/∂x,∂I(k)/∂yの両方に一致するユニークな三次多項式が得られる。t=0におけるこの多項式の値は次のBIO予測である。
図6は、双方向オプティカルフロー(BIO)法における例示的なオプティカルフローの軌跡を示す。ここで、τ0とτ1は、参照フレームまでの距離を示す。距離τ0とτ1は、Ref0とRef1のPOCに基づいてτ0=POC(現在)-POC(Ref0)、τ1=POC(Ref1)-POC(現在)に基づいて計算される。もし、両方の予測が(両方とも過去から、あるいは両方とも将来から)同じ時間の向きから来るとすると、その符号は異なる(たとえば、τ0・τ1<0)。この場合、予測が同時点からでない場合(例えば、τ0≠τ1)、BIOが適用される。両方の参照領域は、非ゼロ動き(例えばMVx0,MVy0,MVx1,MVy1≠0)を有し、ブロック動きベクトルは、時間的距離に比例する(例えば、MVx0/(MVx1=MVy0/MVy1)=-τ0/τ1)。JEMでは、2つの予測が異なる参照ピクチャからのものである場合、BIOをすべての双予測ブロックに適用することができる。LIC(Local Illumination Compensation)が有効になっているCUでは、BIOを無効にすることができます。
場合によっては、マージフラグが真の場合、FRUCフラグはCUに対してシグナリングすることができる。FRUCフラグが偽の場合、マージインデックスをシグナリングすることができ、通常のマージモードが使用される。FRUCフラグが真の場合、追加のFRUCモードフラグがシグナリングされ、どの方法(例えば、バイラテラルマッチングまたはテンプレートマッチング)を用いてブロックの動作情報を導出するか示す。
エンコーダ側では、CUのためにFRUCマージモードを使用するかどうかの決定は、通常のマージ候補の場合と同様に、RDコスト選択に基づいて行われる。例えば、複数のマッチングモード(例えば、バイラテラルマッチングおよびテンプレートマッチング)は、RDコスト選択を使用することによって、CUについてチェックされる。最小のコストにつながるものは、さらに他のCUモードと比較される。FRUCマッチングモードが最も効率的なモードである場合、FRUCフラグはCUに対してtrueに設定され、関連するマッチングモードが使用される。
典型的には、FRUCマージモードにおける動き導出プロセスは、2つのステップを有する:最初にCUレベルの動きサーチが実行され、その後にサブCUレベルの動き精緻化が続く。CUレベルでは、バイラテラルマッチングまたはテンプレートマッチングに基づいて、CU全体に対して初期動きベクトルを導出する。最初に、MV候補のリストが生成され、最小マッチングコストをもたらす候補が、さらなるCUレベルの改良のための出発点として選択される。次に、開始点周辺でのバイラテラルマッチングまたはテンプレートマッチングに基づくローカルサーチを実行する。MVの結果、最小マッチングコストがCU全体のMVとなる。引き続いて、導出されたCU動きベクトルを出発点として、サブCUレベルで動き情報をさらに精緻化する。
図7は、フレームレートアップコンバージョン(FRUC)法で使用されるバイラテラルマッチングの例を示す。バイラテラルマッチングは、2つの異なる参照ピクチャ(710、711)において、現在のCU(700)の動き軌跡に沿って2つのブロック間の最も近いマッチングを見つけることによって、現在のCUの動き情報を導出するために使用される。連続的な動き軌跡の仮定の下で、2つの参照ブロックを指す動きベクトルMV0(701)とMV1(702)は、現在のピクチャと2つの参照ピクチャの間の時間的距離、例えばTD0(703)とTD1(704)に比例する。いくつかの実施態様において、現在のピクチャ700が、時間的に2つの参照ピクチャ(710、711)の間にあり、現在のピクチャから2つの参照ピクチャまでの時間的距離が同じである場合、バイラテラルマッチングは、ミラーベース双方向MVになる。
図8は、フレームレートアップコンバージョン(Frame-Rate Up Conversion:FRUC)法で使用されるテンプレートマッチングの例を示す。テンプレートマッチングは、現在のピクチャ内のテンプレート(例えば、現在のCUの上および/または左に隣接するブロック)と参照ピクチャ810内のブロック(例えば、テンプレートと同じサイズ)との間の最も近いマッチングを見つけることによって、現在のCU800の動き情報を導出するために使用することができる。前述のFRUCマージモードを除き、テンプレートマッチングはAMVPモードにも適用することができる。JEMとHEVCの両方で、AMVPには2つの候補がある。テンプレートマッチング法を用いて、新しい候補を導出することができる。テンプレートマッチングによって新たに導出された候補が最初の既存のAMVP候補と異なる場合、それは(例えば、2番目の既存のAMVP候補を削除することによって)AMVP候補リストの最初に挿入され、リストサイズは2に設定される。AMVPモードに適用され場合、CUレベルサーチのみが適用される。
CUレベルで設定されたMV候補には、(1)現在のCUがAMVPモードにある場合のオリジナルのAMVP候補、(2)すべてのマージ候補、(3)補間されたMVフィールド(後述)のいくつかのMV、および/または(4)上部および左側の隣接する動きベクトルが含まれる。
バイラテラルマッチングを使用する場合、マージ候補の各有効MVは、バイラテラルマッチングの仮定の下にMVペアを生成するための入力として使用することができる。例えば、マージ候補の有効なMVの1つは参照リストAの(MVa,refa)である。そのペア化されたバイラテラルMVの参照ピクチャリファレンスrefbは、refaとrefbが時間的に現在のピクチャの異なる側にあるように、他の参照リストBに見つかる。参照リストBにそのようなrefbがない場合、refbはrefaとは異なる参照として決定され、現在のピクチャとの時間的距離は、リストBの最小のものである。refbが決定された後、現在のピクチャとrefa、refbとの時間的距離に基づいてMVaをスケーリングすることによってMVbが導出される。
いくつかの実装では、補間されたMVフィールドからの4つのMVをCUレベル候補リストに加えられることができる。より具体的には、現在のCUの位置(0、0)、(W/2、0)、(0、H/2)および(W/2、H/2)に補間されたMVが追加される。AMVPモードでFRUCを適用すると、CUレベルのMV候補セットに元のAMVP候補も追加される。一部の実装では、CUレベルで、AMVP CUの場合は15MV、マージCUの場合は13MVを候補リストに追加できる。
サブCUレベルで設定されたMV候補は、CUレベルのサーチから決定されたMV、(2)上、左、左上、及び右上の隣接するMV、(3)参照ピクチャからのコロケーションされたMVのスケーリングされたバージョン、(4)1以上のATMVP候補(例えば4つまで)、および/または(5)1以上のSTMVP候補(例えば4つまで)を含む。参照ピクチャからのスケーリングされたMVは以下のように導出される。両方のリストにある参照ピクチャを横断する。参照ピクチャのサブCUのコロケーション位置(collocated position)のMVは、開始CUレベルMVを参照してスケーリングされる。ATMVPおよびSTMVP候補は、4つの最初の候補とすることができる。サブCUレベルでは、一以上のMV(例えば、17まで)が候補リストに追加される。
フレームをコーディングする前に、補間された動き場が、片側(unilateral)MEに基づいて全体ピクチャに対して生成される。その後、動きフィールドは、後にCUレベルまたはサブCUレベルMV候補として使用されることがある。
いくつかの実施態様において、両方の参照リストにおける各参照ピクチャの動き場を、4×4ブロックレベルで横断する。図9は、FRUC法における片側動き推定(ME)900の例を示す。4×4ブロックごとに、ブロックに関連する動きが現在のピクチャの4×4ブロックを通り、そのブロックは補間されたどの動きにも割り当てられていない場合、参照ブロックの動きは時間距離TD0とTD1(HEVCにおけるTMVPのMVスケーリングと同様)に従って現在のピクチャにスケーリングされ、スケーリングされた動きは現在のフレームのブロックに割り当てられる。4×4ブロックにスケーリングされたMVが割り当てられていない場合は、そのブロックの動きは、補間された動き場では使用不可としてマークされる。
動きベクトルが端数サンプル位置を指すとき、動き補償補間が必要である。複雑さを減らすために、通常の8タップHEVC補間の代わりに双線形補間を、バイラテラルマッチングとテンプレートマッチングの両方に使用することができる。
マッチングコストの計算は、異なるステップで少しずつ異なる。CUレベルで候補セットから候補を選択するとき、マッチングコストは、バイラテラルマッチングまたはテンプレートマッチングの絶対和差(SAD)であり得る。開始MVが決定された後、サブCUレベルサーチにおけるバイラテラルマッチングのマッチングコストCは、以下のように計算される:
ここで、wは重み係数である。いくつかの実施形態において、wは経験的に4に設定することができる。MVおよびMVSは、それぞれ現在のMVおよび開始MVを示す。SADは、サブCUレベルサーチにおけるテンプレートマッチングのマッチングコストとして依然として使用され得る。
FRUCモードでは、MVはルミナンスサンプルのみを使用して導出される。導出された動きは、MC間予測のためのルミナンス(luma)とクロミナンス(chroma)の両方に使用される。MVが決定された後、ルミナンス用の8タップ補間フィルタとクロミナンス用の4タップ補間フィルタを使用して最終MCを実行する。
MV精緻化は、バイラテラルマッチングコストまたはテンプレートマッチングコストを基準としてパターンベースのMVサーチである。JEMでは、2つのサーチパターンがサポートされている。それぞれCUレベルとサブCUレベルのMV精緻化のための無制限中心バイアスダイヤモンドサーチ(UCBDS)と適応クロスサーチである。CUレベルとサブCUレベルのMV精緻化の両方について、MVは1/4ルミナンスサンプルMV精度で直接サーチされ、続いて1/8ルミナンスサンプルMV精緻化が行われる。CUおよびサブCUステップのMV精緻化のサーチ範囲は、8ルミナンスサンプルに設定される。
バイラテラルマッチングマージモードでは、CUの動き情報が、2つの異なる参照ピクチャにおける現在のCUの動き軌跡に沿った2つのブロック間の最も近いマッチに基づいて導出されるので、双予測(bi-prediction)が適用される。テンプレートマッチングマージモードでは、エンコーダは、list0からの単予測(uni-prediction)、list1からの単予測、またはCUに対する双予測の中から選択することができる。選択は、次のようにテンプレートマッチングコストに基づいて行うことができる
IF costBi <= factor * min(cost0,cost1)
双予測を用いる;
Otherwise, if cost0 <= cost1
list0からの単予測を用いる;
Otherwise,
list1からの単予測を用いる;
ここで、cost0はlist0テンプレートマッチングのSAD、cost1はlist1テンプレートマッチングのSAD、costBiは双予測テンプレートマッチングのSADである。例えば、係数の値が1.25に等しい場合、それは選択プロセスが双予測に偏っていることを意味する。予測間方向選択(inter prediction direction selection)を、CUレベルテンプレートマッチングプロセスに適用することができる。
人間の視覚系は、輝度よりも色の位置や動きに敏感ではない。したがって、カラーディテールよりも多くの輝度ディテールを保存することによって帯域幅を最適化することができる。ビデオシステムでは、これは、色差成分を使用することによって達成される。信号はルミナンス(Y’)成分と2つの色差(クロミナンス)成分に分けられる。クロマサブサンプリングは、ルミナンス情報よりもクロマ情報の解像度を低く実装することによって画像を符号化する方法であり、ヒト視覚系においてはルミナンスよりも色差の方が視力が低いことを利用するものである。例えば、一般的なサブサンプリングのタイプには、4:2:2(2つのクロマ成分がルミナンスのサンプルレートの半分でサンプリングされる)、4:1:1(水平方向のカラー解像度が四分の1にされる)、および4:2:0(4:1:1と比較して垂直方向の解像度が半分になる。これは、CbチャネルとCrチャネルがそれぞれの交代ラインでのみサンプリングされるためである)がある。一例では、HEVC標準は、クロマ成分(mvCとして記す)内のMCに使用されたMVを、ルマ成分(mvとして記す)内のMCに使用されるMVから導出する方法を規定する。一般に、mvCは、4:2:0または4:2:2のようなカラーフォーマットに依存する係数をかけたmvとして計算される。
現在ピクチャ参照(current picture referencing:CPR)とも呼ばれるブロック内コピー(IBC、またはピクチャブロック内補償)がHEVCスクリーンコンテンツコーディング拡張(SCC)で採用された。このツールは、テキストとグラフィックスが豊富なコンテンツの繰り返しパターンが同一ピクチャ内で頻繁に発生するという点で、スクリーンコンテンツビデオのコーディングに非常に有効である。予測器として同一または類似のパターンを有する以前に再構成されたブロックを有することは、予測誤差を効果的に低減でき、従ってコーディング効率を改善できる。
HEVC SCCにおけるCRPの設計と同様に、VVCにおいては、IBCモードの使用は、シーケンスおよびピクチャレベルの両方でシグナリングされる。IBCモードは、シーケンスパラメータセット(SPS)で有効にされると、ピクチャレベルで有効にすることができる。IBCモードは、ピクチャレベルで有効にされると、現在の再構成されたピクチャは参照ピクチャとして扱われる。したがって、IBCモードの使用をシグナリングする既存のVVCインターモードに対して、ブロックレベルの構文変更は必要ない。
IBCモードの特徴は以下の通りである:
○通常のインターモードとして扱われる。そのため、マージモードとスキップモードはIBCモードでも使用できる。マージ候補リスト構成は統一され、IBCモードまたはHEVCインターモードのいずれかでコーディングされた隣接位置からのマージ候補を含む。選択されたマージインデックスに応じて、マージモードまたはスキップモードの現在のブロックは、IBCモードモード復号化された隣接ブロック、または、参照ピクチャとして異なるピクチャを有する通常のインターモードコーディングされたブロックのいずれかにマージできる。
○IBCモードのブロックベクトル予測およびコーディング方式は、HEVCインターモード(AMVPおよびMVDコーディング)における動きベクトル予測およびコーディングに使用される方式を再利用する。
○ブロックベクトルとも呼ばれるIBCモードの動きベクトルは整数ピクセル精度でコーディングされるが、補間および逆ブロック化(deblocking)段階で1/4ピクセル精度が要求されるので、復号後に1/16ピクセル精度でメモリに保存される。IBCモードの動きベクトル予測で使用される場合、保存されたベクトル予測子は4だけ右シフトされる。
○サーチ範囲:現在のCTU内に制限される。
○アフィンモード/三角モード/GBI/重み付き予測が有効になっている場合は、CPRを禁止される。
場合によっては、現在のマージ候補リスト内のあらかじめ定めた候補ペアを平均することによってペア別平均候補が生成され、あらかじめ定めたペアは{(0,1)、(0,2)、(1,2)、(0,3)、(1,3)、(2,3)}として定められる。ここで、数字はマージ候補リストへのマージインデックスを表す。平均化された動きベクトルは、各参照リストに対して別々に計算される。両方の動きベクトルが1つのリストにある場合、これらの2つの動きベクトルは、それらが異なる参照ピクチャを指している場合であっても平均される。1つの動きベクトルしか無い場合は、その1つの動きベクトルを直接使用し、動きベクトルがない場合は、このリストを無効のままにする。ペア平均候補は、HEVC標準の組み合わせ候補に取って代わる。2つのマージ候補のMVがMV0=(MV0x,MV0y)、MV1=(MV1x,MV1y)であるとすると、MV*=(MV*
x,MV*
y)と表されるペアのマージ候補のMVは以下のように導出される:
MV*
x=(MV0x+MV1x)/2、及び
MV*
y=(MV0y+MV1y)/2
また、MV0、MV1が現在のピクチャを参照している場合(すなわち、CPRモード)、MV*
x、MV*
yはさらに丸められ、フルピクセルよりも高い精度の部分を取り除き、整数MVが得られるようにする:
MV*
x=(MV*
x/16)<<4、及び
MV*
y=(MV*
y/16)<<4。
留意点として、各ペアについて、2つのうちの一方がCPRコーディングされ、もう一方がCPRコーディングされていない場合、そのようなペアはペア平均候補となることができない。
三角形予測モード(TPM)の概念は、動き補償予測のための新しい三角形パーティションを導入することである。TPMは、CUを対角方向または逆対角方向の2つの三角形予測ユニットに分割する。CUの各三角予測ユニットは、単一の単予測候補リストから導出された独自の単予測動きベクトルと参照フレームインデックスとを用いて相互予測(inter-predicted)される。三角形予測ユニットを予測した後、対角線エッジに対して適応的重み付けプロセスを実行する。次に、変換と量子化プロセスをCU全体に適用する。留意点として、このモードはマージモードにのみ適用される(注:スキップモードは特別なマージモードとして扱われる)。
TPMの単予測候補リスト
TPM動き候補リストと名付けた単予測候補リストは、5つの単予測動きベクトル候補から構成される。これは、5つの空間的隣接ブロックと2つの時間的コロケーション(co-located)ブロックを含む7つの隣接ブロックから導出される。7つの隣接ブロックの動きベクトルを収集し、単予測候補リストに、単予測動きベクトル、双予測動きベクトルのL0動きベクトル、双予測動きベクトルのL1動きベクトル、および双予測動きベクトルのL0動きベクトルとL1動きベクトルの平均化された動きベクトルの順に入れる。候補の数が5未満の場合、動きベクトルはリストに追加されない。TPMのためにこのリストに追加された動き候補はTPM候補と呼ばれ、空間的/時間的ブロックから導出された動き情報はレギュラー動き候補と呼ばれる。
具体的には、以下のステップが含まれる:
(1) 剪定操作を行わずに、(レギュラーマージモードと同様に)A1,B1,B0,A0,B2,Col,Col2から、レギュラー動き候補を取得する。
(2)変数numCurrMergeCand=0と設定
(3)A1,B1,B0,A0,B2,Col,Col2と、5未満のnumCurrMergeCandから導出された各レギュラー動き候補について、正規動き候補が単予測(List0またはList1のいずれか)である場合、TPM候補としてマージリストに直接追加し、numCurrMergeCandを1増加させる。このようなTPM候補は、「オリジナル単予測候補(originally uni-predicted candidate)」と呼ぶ。
完全な剪定(pruning)を適用する。
(4)A1、B1、B0、A0、B2、Col、Col2及び5未満のnumCurrMergeCandから導出された各動き候補は、正規動き候補が双予測である場合、List0からの動き情報が、新しいTPM候補としてTPMマージリスト(すなわち、List0からの単予測に修正)に追加され、numCurrMergeCandが1増加される。このようなTPM候補は「剪定List0-予測候補」と命名される。
完全な剪定が適用される。
(5)A1、B1、B0、A0、B2、Col、Col2から導出された、numCurrMergeCandが5未満である各動き候補に対し、レギュラー動き候補が双予測である場合、List1からの動き情報がTPMマージリストに追加され(すなわち、List1からの単予測に修正され)、numCurrMergeCandが1増加される。このようなTPM候補は「剪定List1-予測候補」と呼ばれる。
完全な剪定が適用される。
(6)A1、B1、B0、A0、B2、Col、Col2から導出された、numCurrMergeCandが5未満である各動き候補について、レギュラー動き候補が双予測である場合、List1の動き情報は最初にList0の参照ピクチャにスケーリングされ、2つのMV(一方は元のList0から、他方はList1からスケーリングされたMV)の平均をTPMマージリストに加算する。そのような候補をList0の動き候補からの平均単予測と呼び、numCurrgeMerCandを1だけ増加させる。
完全な剪定が適用される。
(7)numCurrMergeCandが5未満の場合、ゼロ動きベクトル候補が追加される。
候補をリストに挿入する際に、その候補が以前に追加された候補のうちの1つと同一であるかどうかを確認するために、その候補が以前に追加されたすべての候補と比較されなければならない場合、そのプロセスは完全剪定(full pruning)と呼ばれる。
スケール化されたMVを(MV1’x,MV1’y)で表し、リスト0のMVを(MV0x,MV0y)で表すと仮定する。(MV*
x,MV*
y)で示されるList0動き候補からの平均単予測は、次のように定義される:
MV*
x=(MV0x+MV1’x+1)>>1
MV*
y=(MV0y+MV1’y+1)>>1。
JEMにおけるアフィン予測のようないくつかの既存の実装では、各成分について独立して式(1)に示されるように、各サブブロックのMVがアフィンモデルを用いて計算され、これはルミナンス成分とクロミナンス成分との間の動きベクトルの位置ずれを生じさせる可能性がある。複数の成分の計算もまた、コーディングの非効率性をもたらす。いくつかの他の既存の実装では、List0動き候補からペアマージ候補/平均化単予測を導出するための動きベクトル平均化演算は、サブブロック予測で使用される丸め方法と整合する必要がある。したがって、統一された設計を取得することが望ましい。
本特許文献は、別の成分(例えばルミナンス成分)の一以上のサブブロックのMVから、1つの成分(例えばクロマ成分)のサブブロックのMVを計算する様々な実施形態で実施することができる技術を開示している。開示された技術は、異なる成分のMVを複数回決定する必要性を排除し、それによって、ビデオコーディング効率を改善する。また、開示の技術は、平均化演算および丸め方法に関して統一された設計を導入する。
そのような技術の使用は、種々の実施例について説明される以下の実施例において明らかになる。以下の例では、限定的に解釈してはならないが、Shift(x,s)はShift(x,s)=(x+off)>>sと定義される。
SignShift(x,s)は以下のように定義される:
ここで、offは整数、例えば0または1<<(s-1)である。
いくつかの実施形態において、1つの成分のサブブロックのMVは、別の成分の1以上のサブブロックのMVに基づいて導出することができる。ここで、別の成分の一以上のサブブロックのMVは、アフィンモデルで既に導出されている。このようにして、動き情報を複数導出する必要はない。
いくつかの実施形態では、HEVC標準は、ルミナンス成分(mvと示される)中のMCのために使用されるMVから、クロミナンス成分(mvCと示される)中のMVを導出する方法を定める。一般に、mvCは、4:2:0または4:2:2のようなカラーフォーマットに依存する係数をmvに乗算することで計算される。図10は、本技術に係るサブブロックの成分のMVを4:2:0フォーマットで導出する例を示す。この例では、ブロックサイズはY(ルミナンス成分)で16×16、Cb/Cr(クロミナンス成分)で8×8である。ルミナンス成分のサブブロックサイズは4×4であり、クロミナンス成分のサブブロックサイズは2×2である。MV*は最初にY成分中の4×4サブブロックに対して導出される。Cbおよび/またはCr成分中の2×2サブブロックのMVは、MV*に基づいて導出することができる。この特定の例では、MV*の値が最初にコピーされ、Cbおよび/またはCr成分中の2×2サブブロックのMVは、HEVC標準に従ってMV*に基づいて計算される。
図11は、本技術に従った、4:2:0フォーマットにおいてサブブロックの成分のMVを導出する別の例を示す。この例では、ブロックサイズはルミナンス成分で16×16、クロミナンス成分で8×8である。すべての成分のサブブロックサイズは4×4である。CbまたはCr成分の4×4サブブロックは、Y成分の4×4サブブロックに対応する。ルミナンス成分のMV*が最初に計算される。次に、CbまたはCr成分中の4×4サブブロックのMVが、HEVC標準に従ってMV*に基づいて導出される。
いくつかの実施形態では、MV*は、Y成分中の全ての対応するサブブロックMVの平均として計算される:MV*=(MV0+MV1+MV2+MV3)/4。MV*=(MV*
x、MV*
y)、MV0=(MV0x、MV0y)、MV1=(MV1x、MV1y)、MV2=(MV2x、MV2y)、MV3=(MV3x、MV3y)とする。
いくつかの実施形態では、MV*
x=Shift(MV0x+MV1x+MV2x+MV3x,2)、MV*y=Shift(MV0y+MV1y+MV2y+MV3y,2)である。いくつかの実施形態では、MV*
x=SignShift(MV0x+MV1x+MV2x+MV3x,2)、MV*
y=SignShift(MV0y+MV1y+MV2y+MV3y,2)である。
いくつかの実施形態では、MV*の計算は、以下の演算を使用して行うことができる:
1.a MV’x=Shift(MV0x+MV1x,1)
1.b MV’y=Shift(MV0y+MV1y,1)、
1.c MV’’x=Shift(MV2x+MV3x,1),
1.d MV’’y=Shift(MV2y+MV3y,1)
1.e MV*
x =Shift(MV’x+MV’’x,1)、
1.f MV*
y =Shift(MV’y+MV’’y,1)
いくつかの実施形態では、MV*の計算は、以下の演算を使用して行うことができる:
2.a MV’x=Shift(MV0x+MV2x,1)
2.b MV’y=Shift(MV0y+MV2y,1)
2.c MV’’x=Shift(MV1x+MV3x,1)
2.d MV’’y=Shift(MV1y+MV3y,1)
2.e MV*
x =Shift(MV’x+MV’’x,1)、
2.f MV*
y =Shift(MV’y+MV’’y,1)
いくつかの実施形態において、MV*の計算は、以下の演算を使用して行うことができる:
3.a MV’x=SignShift(MV0x+MV1x,1)
3.b MV’y=SignShift(MV0y+MV1y,1)
3.c MV’’x =SignShift(MV2x+MV3x,1)
3.d MV’’y=SignShift(MV2y+MV3y,1),
3.e MV*
x =SignShift(MV’x+MV’’x,1)
3.f MV*
y =SignShift(MV’y+MV’’y,1)。
いくつかの実施形態において、MV*の計算は、以下の演算を使用して行うことができる:
4.a MV’x =SignShift(MV0x+MV2x,1)
4.b MV’y =SignShift(MV0y+MV2y,1)
4.c MV’’x =SignShift(MV1x+MV3x,1)
4.d MV’’y =SignShift(MV1y+MV3y,1)
4.e MV*
x =SignShift(MV’x+MV’’x,1)
4.f MV*
y =SignShift(MV’y+MV’’y,1)。
いくつかの実施態様において、MV*は、Y成分中の左上サブブロックのMV(例えば、図11に示されるようなMV0)に基づいて計算される。いくつかの実施態様において、MV*は、Y成分における中心サブブロックのMVに基づいて計算される。いくつかの実施態様において、MV*は、Y成分中の全ての対応するサブブロックの中央値MVに基づいて計算される。図11に示すこの特定の例では、MV*=median(MV0、MV1、MV2、MV3)である。
いくつかの実施形態では、色成分のサブブロックのMVの導出は、4:2:0、4:2:2および/または4:4:4などの色フォーマットに基づいて決定することができる。例えば、色フォーマットが4:4:4の場合、サブサンプリングは行われない。ビデオデータのブロック内のサブブロックサイズとサブブロック数は、すべての成分で同じである。ある成分のサブブロックのMVは、別の成分の対応するサブブロックのMVと同じである。
別の例として、カラーフォーマットが4:2:2の場合、サブブロックのサイズは、すべての成分について同じにしてもよく、一方、ブロックの数は、成分が異なれば異なってもよい。ルミナンス成分のMV*は、まずいくつかの対応するサブブロックのMVに基づいて計算される。次いで、CbまたはCr成分中の対応するサブブロックのMV(s)をMV*から導出する。
図12は、本技術によるサブブロックの成分のMVを導出するさらに別の例を示す。この例では、ブロックサイズはルミナンス成分で16×16、クロミナンス成分で8×16である。すべての成分のサブブロックサイズは4×4である。CbまたはCr成分の4×4サブブロックは、Y成分の2つの4×4サブブロックに相当する。ルミナンス成分のMV*をまず計算する。次に、CbまたはCr成分中の4×4サブブロックのMVを、HEVC標準に従ってMV*に基づいて導出する。
いくつかの実施態様において、MV*は、Y成分中の全ての対応するサブブロックMVの平均として計算される:MV*=(MV0+MV1)/2。MV*=(MV*
x、MV*
y)、MV0=(MV0x、MV0y)、MV1=(MV1x、MV1y)とする。
いくつかの実施態様において、MV*
x=Shift(MV0x+MV1x,1)、MV*
y=Shift(MV0y+MV1y,1)である。いくつかの実施態様において、MV*
x=SignShift(MV0x+MV1x,1)、MV*
y=SignShift(MV0y+MV1y,1)である。
図13は、本技術の一以上の実施形態によるビデオ符号化のための例示的方法1300のフローチャートである。方法1300は、動作1310において、現在のビデオブロックの第1の成分を第1サブブロックセットに分割することを含む。方法1300は、動作1320において、現在のビデオブロックの第2の成分を第2サブブロックセットに分割することを含む。第2の成分のサブブロックは、第1の成分の一以上のサブブロックに対応する。また、方法1300は、動作1330において、現在のビデオブロックのカラーフォーマットに基づいて、第2の成分のサブブロックの動きベクトルを、第1のカラー成分の一以上の対応するサブブロックの動きベクトルに基づいて導出することを含む。
図14は、本技術の一以上の実施形態によるビデオ符号化のための別の例示的方法1400のフローチャートである。方法1400は、動作1410において、第1の成分および少なくとも第2の成分を含むビデオデータのブロックを受信することを含む。第1の成分は、第1サブブロックセットに分割され、第2の成分は、第2サブブロックセットに分割される。第2の成分のサブブロックは、第1の成分の一以上のサブブロックに対応する。方法1400は、動作1420において、ビデオデータのブロックのカラーフォーマットに基づいて、第2の成分のサブブロックの動きベクトルを、第1のカラー成分の一以上の対応するサブブロックの動きベクトルに基づいて導出することを含む。方法1400は、動作1430において、導出された動きベクトルに基づいて、ビデオデータのブロックを再構成するか、または同じピクチャ内のビデオデータの他のブロックを復号することを含む。
いくつかの実施態様において、第2の成分のサブブロックは、第1の成分のサブブロックに対応する。例えば、これらの2つのサブブロックは、ピクチャ内で空間的にコロケーション(co-located)されてもよい。方法1300または1400は、さらに、第1の成分のサブブロックの動きベクトルをコピーすることにより、中間動きベクトルセットを計算し、中間動きベクトルセットに係数を適用して、導出された動きベクトルを取得することを含む。前記係数は、カラーフォーマットに関連付けられる。
いくつかの実施態様において、カラーフォーマットは、4:4:4ではなく(例えば、4:2:2又は4:2:0であり)、第1サブブロックセットのうちの少なくとも1つのサブブロックのサイズは、第2サブブロックセットのうちの少なくとも1つのサブブロックのサイズとは異なる。いくつかの実施態様において、カラーフォーマットは、4:4:4であり、第1サブブロックセットのうちの少なくとも1つのサブブロックのサイズは、第2サブブロックセットのうちの少なくとも1つのサブブロックのサイズと同じである。
いくつかの実施態様において、カラーフォーマットは、4:4:4ではなく、第1サブブロックセットのうちの少なくとも1つのサブブロックのサイズは、第2サブブロックセットのうちの少なくとも1つのサブブロックのサイズと同一である。第2の成分のサブブロックは、第1の成分の複数のサブブロックに対応する。いくつかの実施態様において、第2の成分のサブブロックの動きベクトルのうちの少なくとも1つは、第1の成分の複数のサブブロックの対応する動きベクトルの平均に基づいて導出される。
いくつかの実装では、第2の成分のサブブロックは、第1の成分の4つのサブブロックに対応する。4つのサブブロックは、それぞれ、動きベクトルMV0=(MV0x、MV0y)、MV1=(MV1x、MV1y)、MV2=(MV2x、MV2y)およびMV3=(MV3x、MV3y)を有する。方法1300または1400は、中間動きベクトルセットMV*=(MV*
x、MV*
y)を、MV*
x=Shift(MV0x+MV1x+MV2x+MV3x,2)及びMV*
y=Shift(MVy0+MVy1+MVy2+MVy3,2)として計算するステップを含む。Shift(x,s)=(x+off)≫sであり、offおよびsは整数であり、>>は右シフト演算を表す。また、方法1300または1400は、中間動きベクトルセットに係数を適用して、導出された動きベクトルを取得することを含み、前記係数は、カラーフォーマットに関連付けられる。
いくつかの実装では、第2の成分のサブブロックは、第1の成分の4つのサブブロックに対応する。4つのサブブロックは、それぞれ、動きベクトルMV0=(MV0x、MV0y)、MV1=(MV1x、MV1y)、MV2=(MV2x、MV2y)およびMV3=(MV3x、MV3y)を有する。方法1300または1400は、中間動きベクトルセットMV*=(MV*
x、MV*
y)をMV*
x=SignShift(MV0x+MV1x+MV2x+MV3x,2)及びMV*
y=SignShift(MV0y+MV1y+MV2y+MV3y,2)として計算することを含む。ここで、SignShift(x,s)=(x+off)≫s(x≧0のとき)または-((-x+off)≫s)(x<0のとき)であり、offおよびsは整数であり、>>はシフト演算を表す。また、方法1300または1400は、中間動きベクトルセットに係数を適用して、導出した動きベクトルを取得することを含み、前記係数は、カラーフォーマットに関連付けられる。
いくつかの実装では、第2の成分のサブブロックは、第1の成分の4つのサブブロックに対応する。4つのサブブロックは、それぞれ、動きベクトルMV0=(MV0x、MV0y)、MV1=(MV1x、MV1y)、MV2=(MV2x、MV2y)およびMV3=(MV3x、MV3y)を有する。方法1300または1400は、中間動きベクトルセットMV*=(MV*
x、MV*
y)を、MV*
x=Shift(MV’x+MV’’x,1)及びMV*
y=Shift(MV’y+MV’’y,1)として計算することを含み、ここでMV’x=Shift(MV0x+MV1x,1)、MV’y=Shift(MV0y+MV1y,1)、MV’’x=Shift(MV2x+MV3x,1)及びMV’’y=Shift(MV2y+MV3y,1)であり、Shift(x,s)=(x+off)≫sであり、offおよびsは整数であり、>>は右シフト演算を表す。また、方法1300または1400は、中間動きベクトルセットに係数を適用して、派生した動きベクトルを取得することを含み、前記係数は、カラーフォーマットに関連付けられる。
いくつかの実装では、第2の成分のサブブロックは、第1の成分の4つのサブブロックに対応する。4つのサブブロックは、それぞれ、動きベクトルMV0=(MV0x、MV0y)、MV1=(MV1x、MV1y)、MV2=(MV2x、MV2y)およびMV3=(MV3x、MV3y)を有する。方法1300または1400は、中間動きベクトルセットMV*=(MV*
x、MV*
y)を、MV*
x=Shift(MV’x+MV’’x,1)、MV*
y=Shift(MV’y+MV’’y,1)、MV’x=Shift(MV0x+MV2x,1)、MV’y=Shift(MV0y+MV2y,1)、MV’’x=Shift(MV1x+MV3x,1)、MV’’y=Shift(MV1y+MV3y,1)として計算することを含み、Shift(x,s)=(x+off)≫sであり、offおよびsは整数であり、>>は右シフト演算を表す。また、方法1300または1400は、中間動きベクトルセットに係数を適用して、導出された動きベクトルを取得することを含み、前記係数はカラーフォーマットに関連付けられる。
いくつかの実装では、第2の成分のサブブロックは、第1の成分の4つのサブブロックに対応する。4つのサブブロックは、それぞれ、動きベクトルMV0=(MV0x、MV0y)、MV1=(MV1x、MV1y)、MV2=(MV2x、MV2y)およびMV3=(MV3x、MV3y)を有する。方法1300または1400は、中間動きベクトルセットMV*=(MV*
x、MV*
y)を、MV*
x=SignShift(MV’x+MV’’x,1)、MV*
y=SignShift(MV’y+MV’’y,1)、MV’x=SignShift(MV0x+MV1x,1)、MV’y=SignShift(MV0y+MV1y,1)、MV’’x=SignShift(MV2x+MV3x,1)、MV’’y=SignShift(MV2y+MV3y,1)として計算することを含み、SignShift(x,s)=(x+off)≫s(x≧0のとき)または-((-x+off)≫s)(x<0のとき)であり、offおよびsは整数であり、>>はシフト演算を表す。また、方法1300または1400は、中間動きベクトルセットに係数を適用して、導出された動きベクトルを取得することを含み、前記係数はカラーフォーマットに関連付けられる。
いくつかの実装では、第2の成分のサブブロックは、第1の成分の4つのサブブロックに対応する。4つのサブブロックは、それぞれ、動きベクトルMV0=(MV0x、MV0y)、MV1=(MV1x、MV1y)、MV2=(MV2x、MV2y)およびMV3=(MV3x、MV3y)を有する。方法1300または1400は、中間動きベクトルセットMV*=(MV*
x、MV*
y)を、MV*
x=SignShift(MV’x+MV’’x,1)、MV*
y=SignShift(MV’y+MV’’y,1)、MV’x=SignShift(MV0x+MV2x,1)、MV’y=SignShift(MV0y+MV2y,1)、MV’’x=SignShift(MV1x+MV3x,1)、MV’’y=SignShift(MV1y+MV3y,1)として計算することを含み、SignShift(x,s)=(x+off)≫s(x≧0のとき)または-((-x+off)≫s)(x<0のとき)であり、offおよびsは整数であり、>>はシフト演算を表す。また、方法1300または1400は、中間動きベクトルセットに係数を適用し、導出した動きベクトルを取得することを含み、前記係数はカラーフォーマットに関連付けられる。
いくつかの実装では、第2の成分のサブブロックは、第1の成分の2つのサブブロックに対応する。2つのサブブロックは、それぞれ、動きベクトルMV0=(MV0x、MV0y)およびMV1=(MV1x、MV1y)を有する。方法1300または1400は、中間動きベクトルセットMV*=(MV*
x、MV*
y)を、MV*
x=Shift(MV0x+MV1x,1)及びMV*
y=Shift(MVy0+MVy1,1)として計算することを含み、Shift(x,s)=(x+off)≫sであり、offおよびsは整数であり、>>は右シフト演算を表す。また、方法1300または1400は、中間動きベクトルセットに係数を適用して、導出した動きベクトルを取得することを含み、前記係数はカラーフォーマットに関連付けられる。
いくつかの実装では、第2の成分のサブブロックは、第1の成分の2つのサブブロックに対応する。2つのサブブロックは、それぞれ、動きベクトルMV0=(MV0x、MV0y)およびMV1=(MV1x、MV1y)を有する。
方法1300または1400は、中間動きベクトルセットMV*=(MV*
x、MV*
y)をMV*
x=SignShift(MV0x+MV1x,1)及びMV*
y=SignShift(MVy0+MVy1,1)として計算することを含み、SignShift(x,s)=(x+off)≫s(x≧0のとき)又は-((-x+off)≫s(x<0のとき)である。
ここで、offとsは整数であり、>>はシフト演算を表す。また、方法1300または1400は、中間動きベクトルセットに係数を適用し、導出された動きベクトルを取得することを含み、前記係数はカラーフォーマットに関連付けられる。
いくつかの実施形態では、方法1300または1400は、さらに、第1の成分の複数のサブブロックのうちの選択されたサブブロックの動きベクトルに基づいて、中間動きベクトルセットを計算することと、前記中間動きベクトルセットに係数を適用して、導出された動きベクトルを取得することとを含む。係数はカラーフォーマットに関連付けられる。幾つかの実装形態では、選択されたサブブロックは、第1の成分の複数のサブブロックの左上サブブロックである。いくつかの実装では、選択されたサブブロックは、第1の成分の複数のサブブロックの中心サブブロックである。
いくつかの実施形態では、方法1300または1400は、第1の成分の複数のサブブロックの動きベクトルの中央値に基づいて中間動きベクトルセットを計算することと、中間動きベクトルセットに係数を適用して、導出された動きベクトルを取得することとを含み、前記係数はカラーフォーマットに関連付けられる。
いくつかの実施形態では、係数の適用は、高効率ビデオコーディング(HEVC)標準で規定されている。
上述の例は、ビデオデコーダおよび/またはビデオエンコーダで実装されてもよい、以下に述べる方法、例えば、方法1300および1400のコンテキストに組み込むことができる。
図15は、本開示の技術の様々な部分(方法1300および方法1400を含むが、これらに限定されない)を実装するために利用可能な例示的符号化装置1500を示すブロック図である。符号化装置1500は、入力データビットを圧縮する量子化器1505を含む。符号化装置1500はまた、データビットをメモリ1525に供給できるように逆量子化器1515と、動き予測をする予測器1520とを含む。符号化装置1500は、さらに、符号化されたバイナリコードを生成するバイナリエンコーダ1530を含む。
図16は、本開示の技術の様々な部分(方法1300および方法1400を含むが、これらに限定されない)を実装するために利用可能な例示的符号化装置1600を示すブロック図である。復号装置1600は、バイナリ符号を復号するバインダリデコーダ1605を含む。復号装置1600はまた、復号されたデータビットをメモリ1625に供給するように逆量子化器1615と、復号側で動き推定を行う予測器1620とを含む。
図17は、本開示の技術の様々な部分(方法1300および方法1400を含むが、これらに限定されない)を実装するために利用可能な、コンピュータシステムまたは他の制御装置1700のアーキテクチャの一例を示すブロック図である。図17において、コンピュータシステム1700は、相互接続1725を介して接続された一以上のプロセッサ1705およびメモリ1710を含む。相互接続1725は、適切なブリッジ、アダプタ、またはコントローラによって接続された、任意の一以上の別個の物理バス、ポイントツーポイント接続、またはその両方を表すことができる。従って、相互接続1725は、例えば、システムバス、Peripheral Component Interconnect(PCI)バス、ハイパートランスポートまたはindustry standard architecture(ISA)バス、small computer system interface(SCSI)バス、ユニバーサルシリアルバス(USB)、IIC(I2C)バス、または「ファイアワイヤ」と呼ばれることもあるInstitute of Electrical and Electronics Engineers(IEEE)標準674バスを含んでもよい。
プロセッサ1705は、例えばホストコンピュータの全体的な動作を制御する中央処理装置を含んでいてもよい。特定の実施形態では、プロセッサ1705は、メモリ1710に格納されたソフトウェアまたはファームウェアを実行することによって、これを達成する。プロセッサ1705は、一以上のプログラマブル汎用または専用マイクロプロセッサ、デジタル信号プロセッサ(DSP)、プログラマブルコントローラ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイスなど、またはこれらのデバイスの組み合わせであってもよく、またはこれらを含んでもよい。
メモリ1710は、コンピュータシステムのメインメモリであってもよく、またはそれを含むこともできる。メモリ1710は、ランダムアクセスメモリ、リードオンリーメモリ、フラッシュメモリなど、またはこれらの装置の組み合わせの任意の好適な形態を表す。使用において、メモリ1710は、特に、プロセッサ1705によって実行されると、プロセッサ1705に、本開示の技術の実施形態を実施する動作を実行させる一組の機械命令を含んでいてもよい。
また、相互接続1725を介してプロセッサ1705に接続されるのは、(オプションの)ネットワークアダプタ1715である。ネットワークアダプタ1715は、ストレージクライアントおよび/または他のストレージサーバなどのリモートデバイスと通信する能力をコンピュータシステム1700に提供し、例えば、イーサネットアダプタまたはファイバチャネルアダプタであってもよい。
図18は、本開示の技術の種々の部分(方法1600を含むが、これに限定されない)を実装するために利用可能な、モバイル装置1800の例示的実施形態のブロック図を示す。モバイル装置1800は、ラップトップ、スマートフォン、タブレット、カムコーダ、またはビデオを処理可能な他の種類の装置であり得る。モバイル装置1800は、データを処理するためのプロセッサまたはコントローラ1801と、データを格納および/またはバッファするための、プロセッサ1801と通信するメモリ1802とを含む。例えば、プロセッサ1801は、中央処理装置(CPU)またはマイクロコントローラ装置(MCU)を含むことができる。いくつかの実装では、プロセッサ1801はフィールドプログラマブルゲートアレイ(FPGA)を含むことができる。いくつかの実施態様では、移動装置1800は、スマートフォン装置の種々の視覚的及び/又は通信データ処理機能のために、グラフィックス処理ユニット、ビデオ処理ユニット、及び/又は無線通信ユニットを含むか、又はそれらと通信している。例えば、メモリ1802は、プロセッサ1801によって実行されると、例えば情報、コマンド、および/またはデータの受信、処理情報およびデータの処理、および処理情報/データの他のデバイス、例えばアクチュエータまたは外部ディスプレイへの送信または提供などの種々の操作を実行するように、モバイルデバイス1800を構成するプロセッサ実行可能コードを含み、記憶することができる。
移動装置1800の種々の機能をサポートするために、メモリ1802は、命令、ソフトウェア、値、画像、およびプロセッサ1801によって処理または参照される他のデータなどの情報およびデータを格納することができる。例えば、種々のタイプのランダムアクセスメモリ(RAM)デバイス、リードオンリーメモリ(ROM)デバイス、フラッシュメモリデバイス、および他の適切な記憶媒体を使用して、メモリ1802の記憶機能を実現することができる。いくつかの実施態様では、モバイル装置1800は、プロセッサ1801および/またはメモリ1802を他のモジュール、ユニットまたは装置にインターフェースする入出力(I/O)ユニット1803を含む。例えば、I/Oユニット1803は、プロセッサ1801およびメモリ1802をインタフェースして、例えばクラウド内の一以上のコンピュータとユーザ装置との間のような、典型的なデータ通信標準と互換性のある種々のタイプの無線インタフェースを利用することができる。いくつかの実施態様では、モバイル装置1800は、入出力ユニット1803を介した有線接続を使用して、他の装置とインターフェースすることができる。モバイル装置1800はまた、データ記憶装置および/またはビジュアルまたはオーディオ表示装置1804のような他の外部インターフェースとインターフェースして、プロセッサによって処理され得る、メモリに記憶され得る、または表示装置1804の出力ユニットまたは外部装置に表示され得るデータおよび情報を読み出しおよび転送することができる。例えば、表示装置1804は、ブロックが動き補償アルゴリズムを用いて、及び本開示の技術によって符号化されるかどうかに基づいてブロック内コピーを適用するブロック(CU、PUまたはTU)を含むビデオフレームを表示することができる。
以上から、言うまでもなく、本明細書において、説明の目的で、本開示の技術の特定の実施形態を説明したが、本発明の範囲を逸脱することなく、種々の修正を行うことができる。従って、本開示の技術は、添付した特許請求の範囲による場合を除き、限定されない。
この特許文献に記載されている主題の実装および機能動作は、本明細書に開示されている構造およびそれらの構造的等価物を含む、種々のシステム、デジタル電子回路、またはコンピュータソフトウェア、ファームウェア、もしくはハードウェアにおいて、またはそれらの一以上の組み合わせにおいて実施することができる。本明細書に記載された主題の実装は、一以上のコンピュータプログラム製品、すなわち、データ処理装置による、またはデータ処理装置の動作を制御するための、有形および非一時的コンピュータ読み取り可能媒体上に符号化されたコンピュータプログラム命令の一以上のモジュールとして実装することができる。コンピュータ読取可能媒体は、機械読取可能記憶装置、機械読取可能記憶サブストレート、メモリ装置、機械読取可能伝搬信号に影響を与える物質の組成、またはそれらの一以上の組み合わせであり得る。用語「データ処理ユニット」または「データ処理装置」は、例えば、プログラマブルプロセッサ、コンピュータ、または複数のプロセッサまたはコンピュータを含む、データを処理するためのすべての装置、デバイス、および機械を包含する。装置は、ハードウェアに加えて、問題のコンピュータプログラムの実行環境を生成するコード、例えば、プロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらの一以上の組み合わせを構成するコードを含むことができる。
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプト、またはコードとしても知られる)は、コンパイルまたは解釈される言語を含む、任意の形態のプログラミング言語で書くことができ、それは、スタンドアロンプログラムとして、またはコンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチン、または他のユニットを含む、任意の形態で展開することができる。コンピュータプログラムは、必ずしもファイルシステム内のファイルに対応するものではない。プログラムは、他のプログラムまたはデータを保持するファイルの一部分(例えば、マークアップ言語文書に記憶される一以上のスクリプト)、問題のプログラム専用の単一ファイル、または複数の調整されたファイル(例えば、一以上のモジュール、サブプログラム、またはコードの一部分を記憶するファイル)に記憶することができる。コンピュータプログラムは、1つのコンピュータまたは1つのサイトに配置されるか、または複数のサイトに分散され、通信ネットワークによって相互接続される複数のコンピュータ上で実行されるようにデプロイすることができる。
本明細書に記載されるプロセスおよび論理フローは、入力データ上で動作し、出力を生成することによって機能を実行するために、一以上のコンピュータプログラムを実行する一以上のプログラマブルプロセッサによって実行することができる。プロセスおよび論理フローはまた、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)のような特殊目的論理回路によって実行することができ、FPGA(フィールドプログラマブルゲートアレイ)またはASIC(特定用途向け集積回路)のような特殊目的論理回路として装置を実装することができる。
コンピュータプログラムの実行に適したプロセッサは、例えば、汎用および専用マイクロプロセッサの両方、および任意の種類のデジタルコンピュータの任意の一以上のプロセッサを含む。一般に、プロセッサは、読み出し専用メモリまたはランダムアクセスメモリまたはその両方から命令およびデータを受信する。コンピュータの必須要素は、命令を実行するプロセッサと、命令およびデータを記憶する一以上のメモリデバイスである。一般に、コンピュータはまた、データを記憶するための一以上の大容量記憶装置、例えば、磁気ディスク、磁気光ディスク、または光ディスクを含み、またはデータを受信または転送したりするために動作可能に結合される。しかし、コンピュータは、そのような装置を有する必要はない。コンピュータプログラム命令及びデータを記憶するのに適したコンピュータ読取可能媒体は、例えば、EPROM、EEPROM、及びフラッシュメモリデバイスのような半導体メモリデバイスを含む、あらゆる形態の不揮発性メモリ、媒体及びメモリデバイスを含む。プロセッサおよびメモリは、特殊目的論理回路によって補足されるか、またはそれに組み込まれ得る。
明細書は、図面と共に、単に例示的とみなされるが、例示は一例を意味する。本明細書中で使用されるように、単数形「a」、「an」および「the」は、文脈が他に明確に示さない限り、複数形も含むことを意図している。さらに、「or」の使用は、文脈が他に明確に示さない限り、「and/or」を含むことを意図している。
この特許文献には多くの詳細が含まれているが、これらは、いずれかの発明の範囲または特許請求されることができるものを限定するものではなく、特定の発明の特定の実施形態に特有の特徴の説明と解釈されるべきである。別々の実施形態の文脈でこの特許文献に記載されている特徴は、単一の実施形態で組み合わせて実施することもできる。逆に、単一の実施形態の文脈において説明される種々の特徴は、複数の実施形態において別々に、または任意の適切なサブコンビネーションで実施することもできる。さらに、特徴は、特定の組み合わせにおいて作用するものとして上述され、最初にそのようにクレームされてもよいが、クレームされた組み合わせからの1又は複数の特徴は、場合によっては、組み合わせから切り出されてもよく、クレームされた組み合わせは、サブコンビネーション又はサブコンビネーションのバリエーションに向けられ得る。
同様に、図面には特定の順序で動作が示されているが、これは、所望の結果を達成するために、このような動作を図示した特定の順序でまたはシーケンス順序で実行すること、または、例示されたすべての動作を実行することを要求するものとして理解されるべきではない。さらに、この特許文献に記載されている実施形態における種々のシステムコンポーネントの分離は、すべての実施形態においてこのような分離を必要とするものとして理解されるべきではない。
少数の実施形態および例のみを記述し、他の実施形態、拡張およびバリエーションは、この特許文献に記載され、例示されていることに基づいて行われ得る。