IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ クアルコム,インコーポレイテッドの特許一覧

特表2023-553839ビデオコーディングにおける双方向オプティカルフロー
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-12-26
(54)【発明の名称】ビデオコーディングにおける双方向オプティカルフロー
(51)【国際特許分類】
   H04N 19/105 20140101AFI20231219BHJP
   H04N 19/182 20140101ALI20231219BHJP
   H04N 19/154 20140101ALI20231219BHJP
【FI】
H04N19/105
H04N19/182
H04N19/154
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023532594
(86)(22)【出願日】2021-12-21
(85)【翻訳文提出日】2023-05-29
(86)【国際出願番号】 US2021064600
(87)【国際公開番号】W WO2022140377
(87)【国際公開日】2022-06-30
(31)【優先権主張番号】63/129,190
(32)【優先日】2020-12-22
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/645,233
(32)【優先日】2021-12-20
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】507364838
【氏名又は名称】クアルコム,インコーポレイテッド
(74)【代理人】
【識別番号】100108453
【弁理士】
【氏名又は名称】村山 靖彦
(74)【代理人】
【識別番号】100163522
【弁理士】
【氏名又は名称】黒田 晋平
(72)【発明者】
【氏名】ジ・ジャン
(72)【発明者】
【氏名】ハン・フアン
(72)【発明者】
【氏名】チュン-チ・チェン
(72)【発明者】
【氏名】ヤン・ジャン
(72)【発明者】
【氏名】ヴァディム・セレジン
(72)【発明者】
【氏名】マルタ・カルチェヴィッチ
【テーマコード(参考)】
5C159
【Fターム(参考)】
5C159MA04
5C159MA05
5C159MA14
5C159MA21
5C159MC11
5C159ME01
5C159PP04
5C159RC11
5C159TA30
5C159TB08
5C159TB10
5C159TC08
5C159TD12
5C159TD16
(57)【要約】
ビデオデータを復号する方法は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定することと、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割することと、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定することと、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定することと、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定することと、予測サンプルに基づいてブロックを再構成することとを含む。
【特許請求の範囲】
【請求項1】
ビデオデータを復号する方法であって、
前記ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定するステップと、
前記ブロックに対してBDOFが有効化されるという前記決定に基づいて前記ブロックを複数のサブブロックに分割するステップと、
前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、それぞれのひずみ値を決定するステップと、
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するステップと、
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するステップと、
前記予測サンプルに基づいて前記ブロックを再構成するステップと
を備える方法。
【請求項2】
前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、それぞれのひずみ値を決定するステップが、
前記1つまたは複数のサブブロックのうちの第1のサブブロックに対して、前記それぞれのひずみ値のうちの第1のひずみ値を決定するステップと、
前記1つまたは複数のサブブロックのうちの第2のサブブロックに対して、前記それぞれのひずみ値のうちの第2のひずみ値を決定するステップと
を備え、
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するステップが、
前記複数のサブブロックのうちの前記第1のサブブロックに対して、前記第1のサブブロックに対してBDOFが有効化されることを前記第1のひずみ値に基づいて決定するステップと、
前記第1のサブブロックに対してBDOFが有効化されるという前記決定に基づいて、前記第1のサブブロックのための予測サンプルの第1のセットを改善するためのピクセル単位動き改善を決定するステップと、
前記複数のサブブロックのうちの前記第2のサブブロックに対して、BDOFがバイパスされることを前記第2のひずみ値に基づいて決定するステップと、
前記第2のサブブロックに対してBDOFがバイパスされるという前記決定に基づいて、前記第2のサブブロックのための予測サンプルの第2のセットを改善するためのピクセル単位動き改善を決定するステップをバイパスするステップと
を備え、
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して前記予測サンプルを決定するステップが、
前記第1のサブブロックに対して、前記第1のサブブロックの予測サンプルの前記改善された第1のセットを前記第1のサブブロックのための前記ピクセル単位動き改善に基づいて決定するステップと、
前記第2のサブブロックに対して、予測サンプルの前記第2のセットを改善するための前記ピクセル単位動き改善に基づいて予測サンプルの前記第2のセットを改善することなく、予測サンプルの前記第2のセットを決定するステップと
を備える、請求項1に記載の方法。
【請求項3】
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するステップが、前記1つまたは複数のサブブロックのうちの第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するステップを備え、
前記方法が、前記第1のサブブロックの中の各サンプルに対してそれぞれの動き改善を決定するステップをさらに備え、
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して前記予測サンプルを決定するステップが、前記第1のサブブロックの中の各サンプルに対して、前記第1のサブブロックのための予測ブロックの中のサンプルからのそれぞれの改善されたサンプル値を前記それぞれの動き改善に基づいて決定するステップを備える、請求項1に記載の方法。
【請求項4】
中間値を生成するために、前記1つまたは複数のサブブロックのうちの第1のサブブロックの幅、前記1つまたは複数のサブブロックのうちの前記第1のサブブロックの高さ、および第1のスケール係数を乗算するステップと、
しきい値を生成するために、第2のスケール係数に基づいて前記中間値に対して左シフト演算を実行するステップと、
前記第1のサブブロックに対する前記それぞれのひずみ値のうちのひずみ値を前記しきい値と比較するステップと
をさらに備え、
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するステップが、前記第1のサブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを前記比較に基づいて決定するステップを備える、請求項1に記載の方法。
【請求項5】
前記1つまたは複数のサブブロックのうちの第1のサブブロックのための第1の参照ブロックの中のサンプル値の第1のセットを決定するステップと、
スケーリングされたサンプル値の第1のセットを生成するために、スケール係数を用いてサンプル値の前記第1のセットをスケーリングするステップと、
前記1つまたは複数のサブブロックのうちの前記第1のサブブロックのための第2の参照ブロックの中のサンプル値の第2のセットを決定するステップと、
スケーリングされたサンプル値の第2のセットを生成するために、前記スケール係数を用いてサンプル値の前記第2のセットをスケーリングするステップと
をさらに備え、
前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して前記それぞれのひずみ値を決定するステップが、前記第1のサブブロックに対して、スケーリングされたサンプル値の前記第1のセットおよびスケーリングされたサンプル値の前記第2のセットに基づいて前記それぞれのひずみ値のうちのひずみ値を決定するステップを備える、請求項1に記載の方法。
【請求項6】
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するステップが、前記第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するステップを備え、
前記方法が、ピクセル単位BDOFに対するピクセル単位動き改善を決定するために、スケーリングされたサンプル値の前記第1のセットおよびスケーリングされたサンプル値の前記第2のセットを再使用するステップをさらに備える、請求項5に記載の方法。
【請求項7】
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するステップが、前記第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するステップを備え、
前記方法が、BDOFに対する動き改善を決定するために、スケーリングされたサンプル値の前記第1のセットおよびスケーリングされたサンプル値の前記第2のセットを再使用するステップをさらに備える、請求項5に記載の方法。
【請求項8】
前記ブロックを再構成するステップが、
前記予測サンプルと前記ブロックのサンプルとの間の差分を示す残差値を受信するステップと、
前記残差値を前記予測サンプルに加算して前記ブロックを再構成するステップと
を備える、請求項1に記載の方法。
【請求項9】
ビデオデータを復号するためのデバイスであって、
前記ビデオデータを記憶するように構成されたメモリと、
前記メモリに結合された処理回路構成と
を備え、前記処理回路構成が、
前記ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定し、
前記ブロックに対してBDOFが有効化されるという前記決定に基づいて前記ブロックを複数のサブブロックに分割し、
前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定し、
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定し、
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定し、
前記予測サンプルに基づいて前記ブロックを再構成する
ように構成される、デバイス。
【請求項10】
前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、それぞれのひずみ値を決定するために、前記処理回路構成が、
前記1つまたは複数のサブブロックのうちの第1のサブブロックに対して、前記それぞれのひずみ値のうちの第1のひずみ値を決定し、
前記1つまたは複数のサブブロックのうちの第2のサブブロックに対して、前記それぞれのひずみ値のうちの第2のひずみ値を決定する
ように構成され、
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するために、前記処理回路構成が、
前記複数のサブブロックのうちの前記第1のサブブロックに対して、前記第1のサブブロックに対してBDOFが有効化されることを前記第1のひずみ値に基づいて決定し、
前記第1のサブブロックに対してBDOFが有効化されるという前記決定に基づいて、前記第1のサブブロックのための予測サンプルの第1のセットを改善するためのピクセル単位動き改善を決定し、
前記複数のサブブロックのうちの前記第2のサブブロックに対して、BDOFがバイパスされることを前記第2のひずみ値に基づいて決定し、
前記第2のサブブロックに対してBDOFがバイパスされるという前記決定に基づいて、前記第2のサブブロックのための予測サンプルの第2のセットを改善するためのピクセル単位動き改善を決定することをバイパスする
ように構成され、
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して前記予測サンプルを決定するために、前記処理回路構成が、
前記第1のサブブロックに対して、前記第1のサブブロックの予測サンプルの前記改善された第1のセットを前記第1のサブブロックのための前記ピクセル単位動き改善に基づいて決定し、
前記第2のサブブロックに対して、予測サンプルの前記第2のセットを改善するための前記ピクセル単位動き改善に基づいて予測サンプルの前記第2のセットを改善することなく、予測サンプルの前記第2のセットを決定する
ように構成される、請求項9に記載のデバイス。
【請求項11】
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するために、前記処理回路構成が、前記1つまたは複数のサブブロックのうちの第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するように構成され、
前記処理回路構成が、前記第1のサブブロックの中の各サンプルに対してそれぞれの動き改善を決定するようにさらに構成され、
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して前記予測サンプルを決定するために、前記処理回路構成が、前記第1のサブブロックの中の各サンプルに対して、前記第1のサブブロックのための予測ブロックの中のサンプルからのそれぞれの改善されたサンプル値を前記それぞれの動き改善に基づいて決定するように構成される、請求項9に記載のデバイス。
【請求項12】
前記処理回路構成が、
中間値を生成するために、前記1つまたは複数のサブブロックのうちの第1のサブブロックの幅、前記1つまたは複数のサブブロックのうちの前記第1のサブブロックの高さ、および第1のスケール係数を乗算し、
しきい値を生成するために、第2のスケール係数に基づいて前記中間値に対して左シフト演算を実行し、
前記第1のサブブロックに対する前記それぞれのひずみ値のうちのひずみ値を前記しきい値と比較する
ように構成され、
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するために、前記処理回路構成が、前記第1のサブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを前記比較に基づいて決定するように構成される、請求項9に記載のデバイス。
【請求項13】
前記処理回路構成が、
前記1つまたは複数のサブブロックのうちの第1のサブブロックのための第1の参照ブロックの中のサンプル値の第1のセットを決定し、
スケーリングされたサンプル値の第1のセットを生成するために、スケール係数を用いてサンプル値の前記第1のセットをスケーリングし、
前記1つまたは複数のサブブロックのうちの前記第1のサブブロックのための第2の参照ブロックの中のサンプル値の第2のセットを決定し、
スケーリングされたサンプル値の第2のセットを生成するために、前記スケール係数を用いてサンプル値の前記第2のセットをスケーリングする
ように構成され、
前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して前記それぞれのひずみ値を決定するために、前記処理回路構成が、前記第1のサブブロックに対して、スケーリングされたサンプル値の前記第1のセットおよびスケーリングされたサンプル値の前記第2のセットに基づいて前記それぞれのひずみ値のうちのひずみ値を決定するように構成される、請求項9に記載のデバイス。
【請求項14】
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するために、前記処理回路構成が、前記第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するように構成され、
前記処理回路構成が、ピクセル単位BDOFに対するピクセル単位動き改善を決定するために、スケーリングされたサンプル値の前記第1のセットおよびスケーリングされたサンプル値の前記第2のセットを再使用するように構成される、請求項13に記載のデバイス。
【請求項15】
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するために、前記処理回路構成が、前記第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するように構成され、
前記処理回路構成が、BDOFに対する動き改善を決定するために、スケーリングされたサンプル値の前記第1のセットおよびスケーリングされたサンプル値の前記第2のセットを再使用するように構成される、請求項13に記載のデバイス。
【請求項16】
前記ブロックを再構成するために、前記処理回路構成が、
前記予測サンプルと前記ブロックのサンプルとの間の差分を示す残差値を受信し、
前記残差値を前記予測サンプルに加算して前記ブロックを再構成する
ように構成される、請求項9に記載のデバイス。
【請求項17】
復号ビデオデータを表示するように構成されたディスプレイをさらに備える、請求項9に記載のデバイス。
【請求項18】
カメラ、コンピュータ、モバイルデバイス、ブロードキャスト受信機デバイス、またはセットトップボックスのうちの1つまたは複数を備える、請求項9に記載のデバイス。
【請求項19】
命令を記憶したコンピュータ可読記憶媒体であって、前記命令が、実行されたとき、1つまたは複数のプロセッサに、
ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定させ、
前記ブロックに対してBDOFが有効化されるという前記決定に基づいて前記ブロックを複数のサブブロックに分割させ、
前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定させ、
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定させ、
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定させ、
前記予測サンプルに基づいて前記ブロックを再構成させる、コンピュータ可読記憶媒体。
【請求項20】
前記1つまたは複数のプロセッサに、前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、それぞれのひずみ値を決定させる、前記命令が、前記1つまたは複数のプロセッサに、
前記1つまたは複数のサブブロックのうちの第1のサブブロックに対して、前記それぞれのひずみ値のうちの第1のひずみ値を決定させ、
前記1つまたは複数のサブブロックのうちの第2のサブブロックに対して、前記それぞれのひずみ値のうちの第2のひずみ値を決定させる、
命令を備え、
前記1つまたは複数のプロセッサに、前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定させる、前記命令が、前記1つまたは複数のプロセッサに、
前記複数のサブブロックのうちの前記第1のサブブロックに対して、前記第1のサブブロックに対してBDOFが有効化されることを前記第1のひずみ値に基づいて決定させ、
前記第1のサブブロックに対してBDOFが有効化されるという前記決定に基づいて、前記第1のサブブロックのための予測サンプルの第1のセットを改善するためのピクセル単位動き改善を決定させ、
前記複数のサブブロックのうちの前記第2のサブブロックに対して、BDOFがバイパスされることを前記第2のひずみ値に基づいて決定させ、
前記第2のサブブロックに対してBDOFがバイパスされるという前記決定に基づいて、前記第2のサブブロックのための予測サンプルの第2のセットを改善するためのピクセル単位動き改善を決定することをバイパスさせる、
命令を備え、
前記1つまたは複数のプロセッサに、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して前記予測サンプルを決定させる、前記命令が、前記1つまたは複数のプロセッサに、
前記第1のサブブロックに対して、前記第1のサブブロックの予測サンプルの前記改善された第1のセットを前記第1のサブブロックのための前記ピクセル単位動き改善に基づいて決定させ、
前記第2のサブブロックに対して、予測サンプルの前記第2のセットを改善するための前記ピクセル単位動き改善に基づいて予測サンプルの前記第2のセットを改善することなく、予測サンプルの前記第2のセットを決定させる、
命令を備える、請求項19に記載のコンピュータ可読記憶媒体。
【請求項21】
前記1つまたは複数のプロセッサに、前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定させる、前記命令が、前記1つまたは複数のプロセッサに、前記1つまたは複数のサブブロックのうちの第1のサブブロックに対してピクセル単位BDOFが実行されることを決定させる、命令を備え、
前記命令が、前記1つまたは複数のプロセッサに、前記第1のサブブロックの中の各サンプルに対してそれぞれの動き改善を決定させる、命令をさらに備え、
前記1つまたは複数のプロセッサに、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して前記予測サンプルを決定させる、前記命令が、前記1つまたは複数のプロセッサに、前記第1のサブブロックの中の各サンプルに対して、前記第1のサブブロックのための予測ブロックの中のサンプルからのそれぞれの改善されたサンプル値を前記それぞれの動き改善に基づいて決定させる、命令を備える、請求項19に記載のコンピュータ可読記憶媒体。
【請求項22】
前記1つまたは複数のプロセッサに、
中間値を生成するために、前記1つまたは複数のサブブロックのうちの第1のサブブロックの幅、前記1つまたは複数のサブブロックのうちの前記第1のサブブロックの高さ、および第1のスケール係数を乗算させ、
しきい値を生成するために、第2のスケール係数に基づいて前記中間値に対して左シフト演算を実行させ、
前記第1のサブブロックに対する前記それぞれのひずみ値のうちのひずみ値を前記しきい値と比較させる、
命令をさらに備え、
前記1つまたは複数のプロセッサに、前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定させる、前記命令が、前記1つまたは複数のプロセッサに、前記第1のサブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを前記比較に基づいて決定させる、命令を備える、請求項19に記載のコンピュータ可読記憶媒体。
【請求項23】
前記1つまたは複数のプロセッサに、
前記1つまたは複数のサブブロックのうちの第1のサブブロックのための第1の参照ブロックの中のサンプル値の第1のセットを決定させ、
スケーリングされたサンプル値の第1のセットを生成するために、スケール係数を用いてサンプル値の前記第1のセットをスケーリングさせ、
前記1つまたは複数のサブブロックのうちの前記第1のサブブロックのための第2の参照ブロックの中のサンプル値の第2のセットを決定させ、
スケーリングされたサンプル値の第2のセットを生成するために、前記スケール係数を用いてサンプル値の前記第2のセットをスケーリングさせる、
命令をさらに備え、
前記1つまたは複数のプロセッサに、前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して前記それぞれのひずみ値を決定させる、前記命令が、前記1つまたは複数のプロセッサに、前記第1のサブブロックに対して、スケーリングされたサンプル値の前記第1のセットおよびスケーリングされたサンプル値の前記第2のセットに基づいて前記それぞれのひずみ値のうちのひずみ値を決定させる、命令を備える、請求項19に記載のコンピュータ可読記憶媒体。
【請求項24】
ビデオデータを復号するためのデバイスであって、
前記ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定するための手段と、
前記ブロックに対してBDOFが有効化されるという前記決定に基づいて前記ブロックを複数のサブブロックに分割するための手段と、
前記複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するための手段と、
前記複数のサブブロックのうちの前記1つまたは複数のサブブロックの各サブブロックに対して、前記それぞれのひずみ値に基づいて、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを決定するための手段と、
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという前記決定に基づいて、前記1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するための手段と、
前記予測サンプルに基づいて前記ブロックを再構成するための手段と
を備えるデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、2021年12月20日に出願された米国出願第17/645,233号、および2020年12月22日に出願された米国仮出願第63/129,190号の優先権を主張し、その各々の内容全体が参照により本明細書に組み込まれる。米国出願第17/645,233号は、2020年12月22日に出願された米国仮出願第63/129,190号の利益を主張する。
【0002】
本開示は、ビデオ符号化およびビデオ復号に関する。
【背景技術】
【0003】
デジタルビデオ能力は、デジタルテレビジョン、デジタルダイレクトブロードキャストシステム、ワイヤレスブロードキャストシステム、携帯情報端末(PDA)、ラップトップまたはデスクトップコンピュータ、タブレットコンピュータ、電子ブックリーダー、デジタルカメラ、デジタル記録デバイス、デジタルメディアプレーヤ、ビデオゲーミングデバイス、ビデオゲームコンソール、セルラーまたは衛星無線電話、いわゆる「スマートフォン」、ビデオ遠隔会議デバイス、ビデオストリーミングデバイスなどを含む、広範囲にわたるデバイスの中に組み込まれ得る。デジタルビデオデバイスは、MPEG-2、MPEG-4、ITU-T H.263、ITU-T H.264/MPEG-4、Part 10、アドバンストビデオコーディング(AVC)、ITU-T H.265/高効率ビデオコーディング(HEVC)によって規定される規格、およびそのような規格の拡張に記載されている技法などの、ビデオコーディング技法を実装する。ビデオデバイスは、そのようなビデオコーディング技法を実装することによって、デジタルビデオ情報をより効率的に送信、受信、符号化、復号、および/または記憶し得る。
【0004】
ビデオコーディング技法は、ビデオシーケンスに固有の冗長性を低減または除去するために、空間(イントラピクチャ)予測および/または時間(インターピクチャ)予測を含む。ブロックベースのビデオコーディングの場合、ビデオスライス(たとえば、ビデオピクチャ、またはビデオピクチャの一部分)は、ビデオブロックに区分されてよく、ビデオブロックは、コーディングツリーユニット(CTU)、コーディングユニット(CU)、および/またはコーディングノードと呼ばれることもある。ピクチャのイントラコード化(I)スライスの中のビデオブロックは、同じピクチャの中の隣接ブロックの中の参照サンプルに対する空間予測を使用して符号化される。ピクチャのインターコード化(PまたはB)スライスの中のビデオブロックは、同じピクチャの中の隣接ブロックの中の参照サンプルに対する空間予測、または他の参照ピクチャの中の参照サンプルに対する時間予測を使用し得る。ピクチャはフレームと呼ばれることがあり、参照ピクチャは参照フレームと呼ばれることがある。
【先行技術文献】
【非特許文献】
【0005】
【非特許文献1】「Series H: Audiovisual and Multimedia Systems, Infrastructure of Audiovisual Services-Coding of Moving Video, High efficiency Video Coding」、国際電気通信連合、2016年12月、664頁
【非特許文献2】VVCテストモデル10(VTM10.0)、https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM
【非特許文献3】Brossら、「Versatile Video Coding (Draft 10)」、ITU-T SG16 WP 3とISO/IEC JTC 1/SC29/WG11との共同ビデオエキスパートチーム(JVET)、遠隔会議による第18回会合、2020年6月22日~7月1日、JVET-S2001-vA
【非特許文献4】Brossら、「Versatile Video Coding Editorial Refinements on Draft 10」、ITU-T SG16 WP 3とISO/IEC JTC 1/SC29/WG11との共同ビデオエキスパートチーム(JVET)、遠隔会議による第20回会合、2020年10月7日~16日、JVET-T2001-v2
【非特許文献5】J.Chen、Y.Ye、およびS.Kim、「Algorithm description for Versatile Video Coding and Test Model 11 (VTM 11)」、JVET-T2002、2020年12月
【発明の概要】
【発明が解決しようとする課題】
【0006】
概して、本開示は、デコーダ側動きベクトル導出(たとえば、テンプレートマッチング、双方向マッチング、デコーダ側動きベクトル(MV:motion vector)改善(refinement)、および/または双方向オプティカルフロー(BDOF:bi-directional optical flow))のための技法を説明する。本開示の技法は、HEVC(高効率ビデオコーディング)、VVC(多用途ビデオコーディング)、エッセンシャルビデオコーディング(EVC:Essential Video Coding)などの、既存のビデオコーデックのうちのいずれかに適用され得るか、または任意の将来のビデオコーディング規格における効率的なコーディングツールであってよい。
【課題を解決するための手段】
【0007】
1つまたは複数の例では、BDOFのために、ビデオエンコーダおよびビデオデコーダ(たとえば、ビデオコーダ)は、ブロックのサブブロックに対してピクセル単位BDOFが実行されるかどうか、またはBDOFがバイパスされるかどうかを、選択的に決定するように構成され得る。すなわち、ビデオコーダは、ピクセル単位BDOF、またはピクセル単位BDOF(または、一般にBDOF)がバイパスされることのうちの1つを、選択してよい。このようにして、例示的な技法は、一緒に組み合わせられるとき(たとえば、サブブロックに対してピクセル単位BDOFのうちの1つが実行されるかまたはサブブロックに対してBDOFがバイパスされることを、ビデオコーダが決定する場合)のような、より良好なコーディング性能をもたらし得るコーディングモード間の選択を促進し得る。
【0008】
その上、いくつかの例では、サブブロックに対してピクセル単位BDOFを実行すべきかそれともBDOFをバイパスすべきかを決定することは、ひずみ値を決定しひずみ値をしきい値と比較することに基づいてよい。いくつかの例では、ビデオコーダは、ひずみ値を決定するために使用される計算が、ピクセル単位BDOFを実行するときにビデオコーダによって再使用され得るような方法で、ひずみ値を決定するように構成され得る。たとえば、ビデオコーダがピクセル単位BDOFを実行することになる場合、ビデオコーダは、ひずみ値を決定するために実行された計算からの結果を再使用してピクセル単位BDOFを実行してよい。
【0009】
一例では、本開示はビデオデータを復号する方法を説明し、方法は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定することと、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割することと、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定することと、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定することと、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定することと、予測サンプルに基づいてブロックを再構成することとを備える。
【0010】
一例では、本開示はビデオデータを復号するためのデバイスを説明し、デバイスは、ビデオデータを記憶するように構成されたメモリと、メモリに結合された処理回路構成とを備え、処理回路構成は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定し、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割し、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定し、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定し、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定し、予測サンプルに基づいてブロックを再構成するように構成される。
【0011】
一例では、本開示はその上に命令を記憶するコンピュータ可読記憶媒体を説明し、命令は、実行されたとき、1つまたは複数のプロセッサに、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定させ、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割させ、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定させ、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定させ、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定させ、予測サンプルに基づいてブロックを再構成させる。
【0012】
一例では、本開示はビデオデータを復号するためのデバイスを説明し、デバイスは、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定するための手段と、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割するための手段と、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するための手段と、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するための手段と、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するための手段と、予測サンプルに基づいてブロックを再構成するための手段とを備える。
【0013】
1つまたは複数の例の詳細が、添付図面および以下の説明に記載される。他の特徴、目的、および利点が、説明、図面、および特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【0014】
図1】本開示の技法を実行し得る例示的なビデオ符号化および復号システムを示すブロック図である。
図2A】例示的な4分木2分木(QTBT)構造および対応するコーディングツリーユニット(CTU)を示す概念図である。
図2B】例示的な4分木2分木(QTBT)構造および対応するコーディングツリーユニット(CTU)を示す概念図である。
図3】本開示の技法を実行し得る例示的なビデオエンコーダを示すブロック図である。
図4】本開示の技法を実行し得る例示的なビデオデコーダを示すブロック図である。
図5A】マージモードのための空間隣接動きベクトル候補の例を示す概念図である。
図5B】高度動きベクトル予測子(AMVP)モードのための空間隣接動きベクトル候補の例を示す概念図である。
図6A】時間動きベクトル予測子(TMVP)候補の例を示す概念図である。
図6B】動きベクトルスケーリングの例を示す概念図である。
図7】初期動きベクトル(MV)の周囲の探索エリアに対して実行されるテンプレートマッチングを示す概念図である。
図8】時間距離に基づいて比例する動きベクトル差分の例を示す概念図である。
図9】時間距離に関係なく鏡のように反射する動きベクトル差分の例を示す概念図である。
図10】[-8,8]という探索範囲の中の3×3正方形探索パターンの一例を示す概念図である。
図11】復号側動きベクトル改善の一例を示す概念図である。
図12】双方向オプティカルフロー(BDOF)において使用される拡張されたコーディングユニット(CU)を示す概念図である。
図13】サブブロックバイパスを伴うピクセル単位BDOFの例示的なプロセスを示すフローチャートである。
図14】8×8サブブロックのピクセル単位BDOFの一例を示す概念図である。
図15】本開示の技法による、現在ブロックを復号するための例示的な方法を示すフローチャートである。
図16】本開示の技法による、現在ブロックを符号化するための例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【0015】
ビデオエンコーダは、ブロックに対する1つまたは複数の動きベクトルを用いて1つまたは複数の参照ピクチャの中の1つまたは複数の参照ブロックから予測ブロックを生成するように構成され得る。ビデオエンコーダは、予測ブロックとそのブロックとの間の残差を決定し、残差を示す情報および動きベクトルを決定するために使用される情報をシグナリングする。ビデオデコーダは、残差を示す情報および動きベクトルを決定するために使用される情報を受信する。ビデオデコーダは、動きベクトルを決定し、動きベクトルから参照ブロックを決定し、予測ブロックを生成する。ビデオデコーダは、予測ブロックを残差に加算してブロックを再構成する。
【0016】
場合によっては、参照ブロックおよび予測ブロックは同じブロックである。しかしながら、すべての例において参照ブロックおよび予測ブロックが同じであることが必要とされるとは限らない。双予測におけるようないくつかの例では、ビデオエンコーダおよびビデオデコーダは、第1の動きベクトルに基づいて第1の参照ブロックを、かつ第2の動きベクトルに基づいて第2の参照ブロックを決定してよい。ビデオエンコーダおよびビデオデコーダは、第1の参照ブロックと第2の参照ブロックとをブレンドして予測ブロックを生成してよい。
【0017】
その上、いくつかの例では、ビデオエンコーダおよびビデオデコーダは、第1の参照ブロックおよび第2の参照ブロックのサンプル値への調整に基づいて予測ブロックを生成してよい。サンプル値を調整して予測ブロックのサンプルを生成するための1つの例示的な方法は、双方向オプティカルフロー(BDOF)と呼ばれる。たとえば、I(0)(x,y)が第1の参照ブロックを指し、I(1)(x,y)が第2の参照ブロックを指すことを想定する。BDOFでは、予測ブロックはI(0)(x,y)プラスI(1)(x,y)と見なされてよい。以下で説明するように、ビデオエンコーダおよびビデオデコーダは、予測サンプルを決定するプロセスの一部として、調整ファクタ(すなわち、b(x,y))を決定してよく、調整ファクタを予測ブロックに加算(すなわち、I(0)(x,y) + I(1)(x,y) + b(x,y))してよい。予測サンプルを決定するために、I(0)(x,y) + I(1)(x,y) + b(x,y)の結果の追加のスケーリングおよびオフセッティング(offsetting)があってよい。
【0018】
BDOFでは、ビデオエンコーダおよびビデオデコーダは、予測ブロックのサンプル値を調整して予測サンプルを生成するために、動きベクトルを利用して調整ファクタ(たとえば、乗算または加算されるファクタ)を決定する。一例として、ビデオエンコーダおよびビデオデコーダは、第1の参照ブロックの対応するサンプル、第2の参照ブロックの対応するサンプル、および動き改善から生成された対応する値を加算することによって、予測サンプルを生成してよい。
【0019】
様々なタイプのBDOF技法があってよい。BDOFの一例はサブブロックBDOFであり、BDOF技法の別の例はピクセル単位BDOFである。サブブロックBDOFでは、ビデオエンコーダおよびビデオデコーダは、サブブロックに対して動き改善(改善された動きとも呼ばれる)を決定する。サブブロックBDOFの場合、ビデオエンコーダおよびビデオデコーダは、予測ブロックからのサンプルを調整するために同じ動き改善を使用し、ここで、予測ブロックは、第1の参照ブロックおよび第2の参照ブロックを用いて生成されてよい(たとえば、第1の参照ブロックと第2の参照ブロックとの和、または第1の参照ブロックと第2の参照ブロックとの重み付き平均)。ピクセル単位BDOFでは、ビデオエンコーダおよびビデオデコーダは、現在ブロックの中の2つ以上のサンプルに対して異なる場合がある動き改善ファクタを決定してよい。ピクセル単位BDOFの場合、ビデオエンコーダおよびビデオデコーダは、ピクセル単位サンプルに対して決定された動き改善(改善された動きとも呼ばれる)を使用して予測ブロックからのサンプルを調整してよく、予測ブロックは第1の参照ブロックおよび第2の参照ブロックを用いて生成され得る。
【0020】
BDOFまたは他の改善技法は、ブロックレベルにおいて選択的に有効化されてよいが、サブブロックレベルにおいてBDOFが適用されるか否かが、ひずみ値に基づいて推定されてよい。たとえば、ビデオエンコーダは、ブロックに対してBDOFを有効化してよく、ブロックに対してBDOFが有効化されることを示す情報をシグナリングしてよい。
【0021】
それに応答して、ビデオデコーダは、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割してよい。ブロックに対してBDOFが有効化されるが、ビデオデコーダは、BDOFが実際に実行されることになるのかそれともバイパスされることになるのかを、サブブロックごとに決定してよい。たとえば、ビデオデコーダは、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定する。
【0022】
本開示で説明する1つまたは複数の例によれば、ビデオデコーダは、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定してよい。たとえば、ビデオデコーダは、第1のサブブロックに対する第1のひずみ値を決定してよく、第1のサブブロックに対してピクセル単位BDOFが実行されることを第1のひずみ値に基づいて決定してよい。ビデオデコーダは、第2のサブブロックに対する第2のひずみ値を決定してよく、第2のサブブロックに対してBDOFがバイパスされることを第2のひずみ値に基づいて決定してよく、以下同様である。
【0023】
1つまたは複数の例では、BDOFが実行されることをビデオデコーダが決定する場合、ビデオデコーダは、ピクセル単位BDOFを実行してよく、他のBDOF技法は、ビデオデコーダにとって利用可能でなくてよい。すなわち、ビデオデコーダは、各サブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを、サブブロックごとに決定してよい。BDOFが実行されるとき、ビデオデコーダにとって利用可能なBDOF技法はピクセル単位BDOFであってよく、他のBDOF技法が利用可能でなくてよい。
【0024】
1つまたは複数の例では、上記で説明したように、ビデオデコーダは、ピクセル単位BDOFが実行されるかどうか、またはBDOFがバイパスされるかどうかを決定するためのひずみ値を、サブブロックごとに決定してよい。いくつかの例では、以下でより詳細に説明するように、ビデオデコーダは、ひずみ値を決定するために使用された計算を、ピクセル単位BDOFに対するピクセル単位動き改善を決定するために再使用してよい。たとえば、第1のサブブロックに対して、ビデオデコーダは第1のひずみ値を決定してよい。第1のサブブロックに対して、ピクセル単位BDOFが有効化されることをビデオデコーダが決定したことを想定する。いくつかの例では、ピクセル単位動き改善を決定するのに必要とされるすべての値を再計算するのではなく、ビデオデコーダは、ピクセル単位BDOFが実行されることを決定するためにビデオデコーダが実行した計算からの結果を、ピクセル単位動き改善を決定するために再使用するように構成され得る。
【0025】
ビデオデコーダは、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するように構成され得る。たとえば、サブブロックに対して、ピクセル単位BDOFが実行されることを想定する。この例では、ビデオデコーダは、ピクセル単位動き改善に基づいて予測ブロック(たとえば、2つの参照ブロックを結合することから生成されるブロック)のサンプルを改善することによって、サブブロックのための予測サンプルを生成してよい。別の例として、サブブロックに対して、BDOFがバイパスされることを想定する。この例では、ビデオデコーダは、予測サンプルを生成するために予測ブロックのサンプルの改善を実行しなくてよい。むしろ、予測ブロックのサンプルは予測サンプルと同じであってよい(または、場合によっては、BDOFに基づかないいくつかの調整を伴う)。たとえば、BDOFがバイパスされるとき、ビデオエンコーダおよびビデオデコーダは、第1の参照ブロックおよび第2の参照ブロックの中の対応するサンプルの重み付き平均を決定することによって、予測サンプルを生成してよい。
【0026】
ビデオデコーダは、予測サンプルに基づいてブロックを再構成してよい。たとえば、ビデオデコーダは、予測サンプルとブロックのサンプルとの間の差分を示す残差値を受信してよく、残差値を予測サンプルに加算してブロックを再構成してよい。上記の例は、ビデオデコーダの観点から説明される。ビデオエンコーダは、類似の技法を実行するように構成され得る。たとえば、ビデオデコーダによって生成される予測サンプルは、ビデオエンコーダによって生成された予測サンプルと同じはずである。したがって、ビデオエンコーダは、ビデオデコーダと同じ方法で予測サンプルを決定するために、上記で説明した技法と類似の技法を実行してよい。
【0027】
図1は、本開示の技法を実行し得る例示的なビデオ符号化および復号システム100を示すブロック図である。本開示の技法は、一般に、ビデオデータをコーディング(符号化および/または復号)することを対象とする。一般に、ビデオデータは、ビデオを処理するための任意のデータを含む。したがって、ビデオデータは、未加工の符号化されていないビデオ、符号化されたビデオ、復号された(たとえば、再構成された)ビデオ、およびシグナリングデータなどのビデオメタデータを含んでよい。
【0028】
図1に示すように、システム100は、この例では、宛先デバイス116によって復号および表示されるべき符号化ビデオデータを提供する、ソースデバイス102を含む。詳細には、ソースデバイス102は、コンピュータ可読媒体110を介して宛先デバイス116にビデオデータを提供する。ソースデバイス102および宛先デバイス116は、デスクトップコンピュータ、ノートブック(すなわち、ラップトップ)コンピュータ、モバイルデバイス、タブレットコンピュータ、セットトップボックス、スマートフォンなどの電話ハンドセット、テレビジョン、カメラ、ディスプレイデバイス、デジタルメディアプレーヤ、ビデオゲーミングコンソール、ビデオストリーミングデバイス、ブロードキャスト受信機デバイスなどを含む、幅広いデバイスのうちのいずれかを備えてよい。場合によっては、ソースデバイス102および宛先デバイス116は、ワイヤレス通信用に装備されることがあり、したがって、ワイヤレス通信デバイスと呼ばれることがある。
【0029】
図1の例では、ソースデバイス102は、ビデオソース104、メモリ106、ビデオエンコーダ200、および出力インターフェース108を含む。宛先デバイス116は、入力インターフェース122、ビデオデコーダ300、メモリ120、およびディスプレイデバイス118を含む。本開示によれば、ソースデバイス102のビデオエンコーダ200および宛先デバイス116のビデオデコーダ300は、テンプレートマッチング、双方向マッチング、デコーダ側動きベクトル(MV)改善、および双方向オプティカルフローなどの、デコーダ側動きベクトル導出技法のための技法を適用するように構成され得る。したがって、ソースデバイス102はビデオ符号化デバイスの一例を表し、宛先デバイス116はビデオ復号デバイスの一例を表す。他の例では、ソースデバイスおよび宛先デバイスは、他の構成要素または構成を含んでよい。たとえば、ソースデバイス102は、外部カメラなどの外部ビデオソースからビデオデータを受信してよい。同様に、宛先デバイス116は、統合型ディスプレイデバイスを含むのではなく、外部ディスプレイデバイスとインターフェースしてよい。
【0030】
図1に示すようなシステム100は一例にすぎない。一般に、任意のデジタルビデオ符号化および/または復号デバイスが、テンプレートマッチング、双方向マッチング、デコーダ側動きベクトル(MV)改善、および双方向オプティカルフロー(BDOF)などの、デコーダ側動きベクトル導出技法のための技法を実行してよい。ソースデバイス102および宛先デバイス116は、ソースデバイス102が宛先デバイス116への送信のためにコード化ビデオデータを生成するような、コーディングデバイスの例にすぎない。本開示は、データのコーディング(符号化および/または復号)を実行するデバイスとして、「コーディング」デバイスに言及する。したがって、ビデオエンコーダ200およびビデオデコーダ300は、コーディングデバイス、具体的には、それぞれ、ビデオエンコーダおよびビデオデコーダの例を表す。いくつかの例では、ソースデバイス102および宛先デバイス116は、ソースデバイス102および宛先デバイス116の各々がビデオ符号化および復号構成要素を含むように、実質的に対称に動作し得る。したがって、システム100は、たとえば、ビデオストリーミング、ビデオ再生、ビデオブロードキャスティング、またはビデオテレフォニーのための、ソースデバイス102と宛先デバイス116との間の一方向または二方向のビデオ送信をサポートし得る。
【0031】
一般に、ビデオソース104は、ビデオデータ(すなわち、未加工の符号化されていないビデオデータ)のソースを表し、ビデオデータの連続した一連のピクチャ(「フレーム」とも呼ばれる)をビデオエンコーダ200に提供し、ビデオエンコーダ200は、ピクチャのためのデータを符号化する。ソースデバイス102のビデオソース104は、ビデオカメラ、以前にキャプチャされた未加工ビデオを含むビデオアーカイブ、および/またはビデオコンテンツプロバイダからビデオを受信するためのビデオフィードインターフェースなどの、ビデオキャプチャデバイスを含んでよい。さらなる代替として、ビデオソース104は、ソースビデオとしてのコンピュータグラフィックスベースのデータ、またはライブビデオ、アーカイブされたビデオ、およびコンピュータ生成されたビデオの組合せを生成し得る。各場合において、ビデオエンコーダ200は、キャプチャされたビデオデータ、事前にキャプチャされたビデオデータ、またはコンピュータ生成されたビデオデータを符号化する。ビデオエンコーダ200は、受信された順序(「表示順序」と呼ばれることがある)からコーディング用のコーディング順序にピクチャを並べ替えてよい。ビデオエンコーダ200は、符号化ビデオデータを含むビットストリームを生成し得る。ソースデバイス102は、次いで、たとえば、宛先デバイス116の入力インターフェース122による受信および/または取出しのために、出力インターフェース108を介してコンピュータ可読媒体110上に符号化ビデオデータを出力し得る。
【0032】
ソースデバイス102のメモリ106および宛先デバイス116のメモリ120は、汎用メモリを表す。いくつかの例では、メモリ106、120は、未加工ビデオデータ、たとえば、ビデオソース104からの未加工ビデオ、およびビデオデコーダ300からの未加工の復号ビデオデータを記憶し得る。追加または代替として、メモリ106、120は、たとえば、それぞれ、ビデオエンコーダ200およびビデオデコーダ300によって実行可能なソフトウェア命令を記憶し得る。メモリ106およびメモリ120は、この例ではビデオエンコーダ200およびビデオデコーダ300とは別個に示されるが、ビデオエンコーダ200およびビデオデコーダ300がまた、機能的に類似のまたは均等な目的のために内部メモリを含み得ることを理解されたい。さらに、メモリ106、120は、符号化ビデオデータ、たとえば、ビデオエンコーダ200からの出力およびビデオデコーダ300への入力を記憶し得る。いくつかの例では、メモリ106、120の部分は、たとえば、未加工の復号ビデオデータおよび/または符号化ビデオデータを記憶するための、1つまたは複数のビデオバッファとして割り振られ得る。
【0033】
コンピュータ可読媒体110は、符号化ビデオデータをソースデバイス102から宛先デバイス116にトランスポートすることが可能な任意のタイプの媒体またはデバイスを表してよい。一例では、コンピュータ可読媒体110は、たとえば、無線周波数ネットワークまたはコンピュータベースのネットワークを介して、ソースデバイス102がリアルタイムで符号化ビデオデータを宛先デバイス116へ直接送信することを可能にする通信媒体を表す。ワイヤレス通信プロトコルなどの通信規格に従って、出力インターフェース108が、符号化ビデオデータを含む送信信号を変調してよく、入力インターフェース122が、受信された送信信号を復調してよい。通信媒体は、無線周波数(RF)スペクトルまたは1つもしくは複数の物理伝送線路などの、任意のワイヤレスまたは有線の通信媒体を備えてよい。通信媒体は、ローカルエリアネットワーク、ワイドエリアネットワーク、またはインターネットなどのグローバルネットワークなどのパケットベースネットワークの一部を形成してよい。通信媒体は、ルータ、スイッチ、基地局、またはソースデバイス102から宛先デバイス116への通信を容易にするために有用であり得る任意の他の機器を含んでよい。
【0034】
いくつかの例では、ソースデバイス102は、符号化データを出力インターフェース108から記憶デバイス112に出力し得る。同様に、宛先デバイス116は、入力インターフェース122を介して、記憶デバイス112からの符号化データにアクセスし得る。記憶デバイス112は、ハードドライブ、ブルーレイディスク、DVD、CD-ROM、フラッシュメモリ、揮発性もしくは不揮発性メモリ、または符号化ビデオデータを記憶するための任意の他の好適なデジタル記憶媒体などの、様々な分散型データ記憶媒体またはローカルにアクセスされるデータ記憶媒体のいずれかを含んでよい。
【0035】
いくつかの例では、ソースデバイス102は、ソースデバイス102によって生成された符号化ビデオデータを記憶し得るファイルサーバ114または別の中間記憶デバイスに、符号化ビデオデータを出力し得る。宛先デバイス116は、ストリーミングまたはダウンロードを介して、ファイルサーバ114からの記憶されたビデオデータにアクセスし得る。
【0036】
ファイルサーバ114は、符号化ビデオデータを記憶するとともにその符号化ビデオデータを宛先デバイス116へ送信することが可能な、任意のタイプのサーバデバイスであってよい。ファイルサーバ114は、(たとえば、ウェブサイト用の)ウェブサーバ、(ファイル転送プロトコル(FTP)またはファイル配信オーバー単方向トランスポート(FLUTE:File Delivery over Unidirectional Transport)プロトコルなどの)ファイル転送プロトコルサービスを提供するように構成されたサーバ、コンテンツ配信ネットワーク(CDN)デバイス、ハイパーテキスト転送プロトコル(HTTP)サーバ、マルチメディアブロードキャストマルチキャストサービス(MBMS)もしくは拡張MBMS(eMBMS)サーバ、および/またはネットワーク接続ストレージ(NAS)デバイスを表してよい。ファイルサーバ114は、追加または代替として、動的適応ストリーミングオーバーHTTP(DASH:Dynamic Adaptive Streaming over HTTP)、HTTPライブストリーミング(HLS:HTTP Live Streaming)、リアルタイムストリーミングプロトコル(RTSP:Real Time Streaming Protocol)、HTTP動的ストリーミングなどの、1つまたは複数のHTTPストリーミングプロトコルを実施してよい。
【0037】
宛先デバイス116は、インターネット接続を含む任意の標準的なデータ接続を通じて、ファイルサーバ114からの符号化ビデオデータにアクセスし得る。これは、ワイヤレスチャネル(たとえば、Wi-Fi接続)、有線接続(たとえば、デジタル加入者回線(DSL)、ケーブルモデムなど)、またはファイルサーバ114上に記憶された符号化ビデオデータにアクセスするのに適した両方の組合せを含んでよい。入力インターフェース122は、ファイルサーバ114からメディアデータを取り出すかもしくは受信するための上記で説明した様々なプロトコル、またはメディアデータを取り出すための他のそのようなプロトコルのうちの、いずれか1つまたは複数に従って動作するように構成され得る。
【0038】
出力インターフェース108および入力インターフェース122は、ワイヤレス送信機/受信機、モデム、有線ネットワーキング構成要素(たとえば、Ethernetカード)、様々なIEEE802.11規格のうちのいずれかに従って動作するワイヤレス通信構成要素、または他の物理構成要素を表してよい。出力インターフェース108および入力インターフェース122がワイヤレス構成要素を備える例では、出力インターフェース108および入力インターフェース122は、4G、4G-LTE(ロングタームエボリューション)、LTEアドバンスト、5Gなどのセルラー通信規格に従って、符号化ビデオデータなどのデータを転送するように構成され得る。出力インターフェース108がワイヤレス送信機を備えるいくつかの例では、出力インターフェース108および入力インターフェース122は、IEEE802.11仕様、IEEE802.15仕様(たとえば、ZigBee(商標))、Bluetooth(商標)規格などの他のワイヤレス規格に従って、符号化ビデオデータなどのデータを転送するように構成され得る。いくつかの例では、ソースデバイス102および/または宛先デバイス116は、それぞれのシステムオンチップ(SoC)デバイスを含んでよい。たとえば、ソースデバイス102は、ビデオエンコーダ200および/または出力インターフェース108に起因する機能性を実行するためのSoCデバイスを含んでよく、宛先デバイス116は、ビデオデコーダ300および/または入力インターフェース122に起因する機能性を実行するためのSoCデバイスを含んでよい。
【0039】
本開示の技法は、オーバージエアテレビジョンブロードキャスト、ケーブルテレビジョン送信、衛星テレビジョン送信、動的適応ストリーミングオーバーHTTP(DASH)などのインターネットストリーミングビデオ送信、データ記憶媒体上で符号化されているデジタルビデオ、データ記憶媒体上に記憶されたデジタルビデオの復号、または他の適用例などの、様々なマルチメディア適用例のうちのいずれかをサポートするビデオコーディングに適用されてよい。
【0040】
宛先デバイス116の入力インターフェース122は、コンピュータ可読媒体110(たとえば、通信媒体、記憶デバイス112、ファイルサーバ114など)から符号化ビデオビットストリームを受信する。符号化ビデオビットストリームは、ビデオブロックまたは他のコード化ユニット(たとえば、スライス、ピクチャ、ピクチャグループ、シーケンスなど)の特性および/または処理を記述する値を有するシンタックス要素などの、ビデオデコーダ300によっても使用されビデオエンコーダ200によって規定されるシグナリング情報を含んでよい。ディスプレイデバイス118は、復号ビデオデータの復号ピクチャをユーザに表示する。ディスプレイデバイス118は、液晶ディスプレイ(LCD)、プラズマディスプレイ、有機発光ダイオード(OLED)ディスプレイ、または別のタイプのディスプレイデバイスなどの、様々なディスプレイデバイスのうちのいずれかを表してよい。
【0041】
図1に示さないが、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は各々、オーディオエンコーダおよび/またはオーディオデコーダと統合されてよく、共通のデータストリームの中にオーディオとビデオの両方を含む多重化されたストリームを処理するために、適切なMUX-DEMUXユニット、または他のハードウェアおよび/もしくはソフトウェアを含んでよい。適用可能な場合、MUX-DEMUXユニットは、ITU H.223マルチプレクサプロトコル、またはユーザデータグラムプロトコル(UDP)などの他のプロトコルに準拠し得る。
【0042】
ビデオエンコーダ200およびビデオデコーダ300は各々、1つまたは複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、個別論理、ソフトウェア、ハードウェア、ファームウェア、またはそれらの任意の組合せなどの、様々な好適なエンコーダおよび/またはデコーダ回路構成のうちのいずれかとして実装され得る。技法が部分的にソフトウェアで実装されるとき、デバイスは、好適な非一時的コンピュータ可読媒体にソフトウェア用の命令を記憶してよく、本開示の技法を実行するために1つまたは複数のプロセッサを使用してハードウェアの中で命令を実行し得る。すなわち、実行されたとき、本開示で説明する例示的な技法を1つまたは複数のプロセッサに実行させる命令をその上に記憶する、コンピュータ可読記憶媒体があってよい。ビデオエンコーダ200およびビデオデコーダ300の各々は、1つまたは複数のエンコーダまたはデコーダの中に含まれてよく、それらのいずれも、それぞれのデバイスの中で複合エンコーダ/デコーダ(コーデック)の一部として統合されてよい。ビデオエンコーダ200および/またはビデオデコーダ300を含むデバイスは、集積回路、マイクロプロセッサ、および/またはセルラー電話などのワイヤレス通信デバイスを備えてよい。
【0043】
以下のことはビデオコーディング規格を説明する。ビデオコーディング規格は、そのスケーラブルビデオコーディング(SVC)拡張およびマルチビュービデオコーディング(MVC)拡張を含む、ITU-T H.261、ISO/IEC MPEG-1 Visual、ITU-T H.262またはISO/IEC MPEG-2 Visual、ITU-T H.263、ISO/IEC MPEG-4 Visual、およびITU-T H.264(ISO/IEC MPEG-4 AVCとも呼ばれる)を含む。加えて、その範囲拡張、マルチビュー拡張(MV-HEVC)、およびスケーラブル拡張(SHVC)を含む、高効率ビデオコーディング(HEVC)またはITU-T H.265が、ビデオコーディング共同研究部会(JCT-VC)、ならびにITU-Tビデオコーディングエキスパートグループ(VCEG)とISO/IECモーションピクチャエキスパートグループ(MPEG)との3Dビデオコーディング拡張策定共同研究部会(JCT-3V)によって、策定されている。HEVC仕様は、ITU-T H.265、「Series H: Audiovisual and Multimedia Systems, Infrastructure of Audiovisual Services-Coding of Moving Video, High efficiency Video Coding」、国際電気通信連合、2016年12月、664頁から入手可能である。
【0044】
ITU-T VCEG(Q6/16)およびISO/IEC MPEG(JTC 1/SC29/WG11)は、現在のHEVC規格(スクリーンコンテンツコーディングおよび高ダイナミックレンジコーディングに対する、その現在の拡張および近々の拡張を含む)の圧縮能力を著しく超える圧縮能力を有する将来のビデオコーディング技術の標準化を検討中である。そのグループは、このエリアのそれらの専門家によって提案される圧縮技術設計を評価するために、共同ビデオ探究部会(JVET)と呼ばれる共同研究の取組みの中で、この探求活動に対して一緒に作業中である。参照ソフトウェアの最新バージョン、すなわち、VVCテストモデル10(VTM10.0)は、https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTMからダウンロードされ得る。
【0045】
ビデオエンコーダ200およびビデオデコーダ300は、高効率ビデオコーディング(HEVC)とも呼ばれるITU-T H.265、またはマルチビューおよび/もしくはスケーラブルビデオコーディング拡張などのそれらへの拡張などの、ビデオコーディング規格に従って動作し得る。代替として、ビデオエンコーダ200およびビデオデコーダ300は、多用途ビデオコーディング(VVC)とも呼ばれるITU-T H.266などの、他のプロプライエタリ規格または業界規格に従って動作し得る。VVC規格のドラフトは、Brossら、「Versatile Video Coding (Draft 10)」、ITU-T SG16 WP 3とISO/IEC JTC 1/SC29/WG11との共同ビデオエキスパートチーム(JVET)、遠隔会議による第18回会合、2020年6月22日~7月1日、JVET-S2001-vA(以下で、「VVCドラフト10」)に記載されている。VVCドラフト10の編集改良が、Brossら、「Versatile Video Coding Editorial Refinements on Draft 10」、ITU-T SG16 WP 3とISO/IEC JTC 1/SC29/WG11との共同ビデオエキスパートチーム(JVET)、遠隔会議による第20回会合、2020年10月7日~16日、JVET-T2001-v2に記載されている。多用途ビデオコーディングおよびテストモデル10(VTM10.0)のアルゴリズム記述は、J.Chen、Y.Ye、およびS.Kim、「Algorithm description for Versatile Video Coding and Test Model 11 (VTM 11)」、JVET-T2002、2020年12月(以下で、JVET-T2002)として参照され得る。しかしながら、本開示の技法は、いかなる特定のコーディング規格にも限定されない。
【0046】
一般に、ビデオエンコーダ200およびビデオデコーダ300は、ピクチャのブロックベースのコーディングを実行し得る。「ブロック」という用語は、一般に、処理される(たとえば、符号化および/または復号プロセスにおいて符号化、復号、または他の方法で使用される)べきデータを含む構造を指す。たとえば、ブロックは、ルミナンスおよび/またはクロミナンスデータのサンプルの2次元行列を含んでよい。一般に、ビデオエンコーダ200およびビデオデコーダ300は、YUV(たとえば、Y、Cb、Cr)フォーマットで表されるビデオデータをコーディングし得る。すなわち、ピクチャのサンプルのための赤色、緑色、および青色(RGB)データをコーディングするのではなく、ビデオエンコーダ200およびビデオデコーダ300は、ルミナンス成分およびクロミナンス成分をコーディングしてよく、ここで、クロミナンス成分は、赤色相と青色相の両方のクロミナンス成分を含んでよい。いくつかの例では、ビデオエンコーダ200は、符号化する前に、受信されたRGBフォーマットされたデータをYUV表現に変換し、ビデオデコーダ300は、YUV表現をRGBフォーマットに変換する。代替として、前処理ユニットおよび後処理ユニット(図示せず)が、これらの変換を実行してもよい。
【0047】
本開示は、一般に、ピクチャのデータを符号化または復号するプロセスを含めるように、ピクチャのコーディング(たとえば、符号化および復号)に言及することがある。同様に、本開示は、ブロックのためのデータを符号化または復号するプロセスを含めるように、ピクチャのブロックのコーディング、たとえば、予測および/または残差コーディングに言及することがある。符号化ビデオビットストリームは、一般に、コーディング決定(たとえば、コーディングモード)およびブロックへのピクチャの区分を表すシンタックス要素のための一連の値を含む。したがって、ピクチャまたはブロックをコーディングすることへの言及は、一般に、ピクチャまたはブロックを形成するシンタックス要素のためのコーディング値として理解されるべきである。
【0048】
HEVCは、コーディングユニット(CU)、予測ユニット(PU)、および変換ユニット(TU)を含む、様々なブロックを規定する。HEVCによれば、(ビデオエンコーダ200などの)ビデオコーダは、4分木構造に従ってコーディングツリーユニット(CTU)をCUに区分する。すなわち、ビデオコーダは、CTUおよびCUを4個の等しい重複しない正方形に区分し、4分木の各ノードは、0個または4個のいずれかの子ノードを有する。子ノードがないノードは「リーフノード」と呼ばれることがあり、そのようなリーフノードのCUは、1つもしくは複数のPUおよび/または1つもしくは複数のTUを含んでよい。ビデオコーダはPUおよびTUをさらに区分し得る。たとえば、HEVCでは、残差4分木(RQT)はTUの区分を表す。HEVCでは、PUはインター予測データを表し、TUは残差データを表す。イントラ予測されるCUは、イントラモード表示などのイントラ予測情報を含む。
【0049】
別の例として、ビデオエンコーダ200およびビデオデコーダ300は、VVCに従って動作するように構成され得る。VVCによれば、(ビデオエンコーダ200などの)ビデオコーダは、ピクチャを複数のコーディングツリーユニット(CTU)に区分する。ビデオエンコーダ200は、4分木2分木(QTBT)構造またはマルチタイプツリー(MTT)構造などのツリー構造に従ってCTUを区分し得る。QTBT構造は、HEVCのCU、PU、およびTUの間の分離などの、複数の区分タイプの概念を排除する。QTBT構造は、2つのレベル、すなわち、4分木区分に従って区分された第1のレベル、および2分木区分に従って区分された第2のレベルを含む。QTBT構造のルートノードはCTUに対応する。2分木のリーフノードはコーディングユニット(CU)に対応する。
【0050】
MTT区分構造では、ブロックは、4分木(QT)区分、2分木(BT)区分、および1つまたは複数のタイプの3分木(TT:triple tree)(3元木(TT:ternary tree)とも呼ばれる)区分を使用して区分され得る。3分木区分または3元木区分は、ブロックが3個のサブブロックに分割される区分である。いくつかの例では、3分木区分または3元木区分は、中心を通って元のブロックを分割することなく、ブロックを3個のサブブロックに分割する。MTTにおける区分タイプ(たとえば、QT、BT、およびTT)は対称または非対称であり得る。
【0051】
いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、ルミナンス成分およびクロミナンス成分の各々を表すために単一のQTBTまたはMTT構造を使用してよいが、他の例では、ビデオエンコーダ200およびビデオデコーダ300は、ルミナンス成分のための1つのQTBT/MTT構造および両方のクロミナンス成分のための別のQTBT/MTT構造(または、それぞれのクロミナンス成分のための2つのQTBT/MTT構造)などの、2つ以上のQTBTまたはMTT構造を使用してよい。
【0052】
ビデオエンコーダ200およびビデオデコーダ300は、HEVCによる4分木区分、QTBT区分、MTT区分、または他の区分構造を使用するように構成され得る。説明のために、本開示の技法の説明はQTBT区分に関して提示される。しかしながら、本開示の技法がまた、4分木区分または他のタイプの区分も使用するように構成されたビデオコーダに適用され得ることを理解されたい。
【0053】
いくつかの例では、CTUは、ルーマサンプルのコーディングツリーブロック(CTB)、3つのサンプルアレイを有するピクチャのクロマサンプルの2つの対応するCTB、またはモノクロピクチャ、もしくはサンプルをコーディングするために使用される3つの別個の色平面およびシンタックス構造を使用してコーディングされるピクチャの、サンプルのCTBを含む。CTBは、CTBへの成分の分割が区分であるような、いくつかの値のNに対するサンプルのN×Nブロックであってよい。成分は、4:2:0、4:2:2、もしくは4:4:4カラーフォーマットでピクチャを構成する3つのアレイ(ルーマおよび2つのクロマ)のうちの1つからの、アレイもしくは単一のサンプル、またはモノクロフォーマットでピクチャを作成するアレイの、アレイもしくは単一のサンプルである。いくつかの例では、コーディングブロックは、コーディングブロックへのCTBの分割が区分であるような、いくつかの値のMおよびNに対するサンプルのM×Nブロックである。
【0054】
ブロック(たとえば、CTUまたはCU)は、ピクチャの中で様々な方法でグループ化され得る。一例として、ブリックは、ピクチャの中の特定のタイル内のCTU行の長方形領域を指すことがある。タイルは、ピクチャの中の特定のタイル列および特定のタイル行内のCTUの長方形領域であり得る。タイル列は、ピクチャの高さに等しい高さおよび(たとえば、ピクチャパラメータセットの中などの)シンタックス要素によって指定される幅を有する、CTUの長方形領域を指す。タイル行は、(たとえば、ピクチャパラメータセットの中などの)シンタックス要素によって指定される高さおよびピクチャの幅に等しい幅を有する、CTUの長方形領域を指す。
【0055】
いくつかの例では、タイルは複数のブリックに区分されてよく、ブリックの各々はタイル内の1つまたは複数のCTU行を含んでよい。複数のブリックに区分されないタイルも、ブリックと呼ばれることがある。しかしながら、タイルの真のサブセットであるブリックは、タイルと呼ばれないことがある。
【0056】
ピクチャの中のブリックはまた、スライスの中に並べられてよい。スライスは、単一のネットワークアブストラクションレイヤ(NAL)ユニットの中に独占的に含まれ得る、ピクチャの整数個のブリックであってよい。いくつかの例では、スライスは、いくつかの完全なタイル、または1つのタイルの完全なブリックの連続するシーケンスのみのいずれかを含む。
【0057】
本開示は、垂直次元および水平次元に換算して(CUまたは他のビデオブロックなどの)ブロックのサンプル次元を指すために、互換的に「N×N」および「NバイN(N by N)」、たとえば、16×16サンプルまたは16バイ16サンプルを使用してよい。一般に、16×16のCUは、垂直方向に16個のサンプル(y=16)および水平方向に16個のサンプル(x=16)を有する。同様に、N×NのCUは、一般に、垂直方向にN個のサンプルおよび水平方向にN個のサンプルを有し、ここで、Nは負ではない整数値を表す。CUの中のサンプルは、行および列をなして並べられてよい。その上、CUは、必ずしも水平方向において垂直方向におけるのと同じ数のサンプルを有する必要があるとは限らない。たとえば、CUはN×Mサンプルを備えてよく、ここで、Mは必ずしもNに等しいとは限らない。
【0058】
ビデオエンコーダ200は、予測情報および/または残差情報、ならびに他の情報を表す、CUのためのビデオデータを符号化する。予測情報は、CUのための予測ブロックを形成するためにCUがどのように予測されることになるのかを示す。残差情報は、概して、符号化する前のCUのサンプルと予測ブロックのサンプルとの間のサンプルごとの差分を表す。
【0059】
CUを予測するために、ビデオエンコーダ200は、概して、インター予測またはイントラ予測を通じてCUのための予測ブロックを形成してよい。インター予測とは、概して、以前にコーディングされたピクチャのデータからCUを予測することを指し、イントラ予測とは、概して、同じピクチャの以前にコーディングされたデータからCUを予測することを指す。インター予測を実行するために、ビデオエンコーダ200は、1つまたは複数の動きベクトルを使用して予測ブロックを生成し得る。ビデオエンコーダ200は、一般に、たとえば、CUと参照ブロックとの間の差分に関してCUに密に整合する参照ブロックを識別するために、動き探索を実行し得る。ビデオエンコーダ200は、参照ブロックが現在CUに密に整合するかどうかを決定するために、絶対差分和(SAD)、2乗差分和(SSD)、平均絶対差(MAD)、平均2乗差(MSD)、または他のそのような差分計算を使用して差分メトリックを計算し得る。いくつかの例では、ビデオエンコーダ200は、単方向予測または双方向予測を使用して現在CUを予測し得る。
【0060】
VVCのいくつかの例はまた、インター予測モードと見なされ得るアフィン動き補償モードを提供する。アフィン動き補償モードでは、ビデオエンコーダ200は、ズームインもしくはズームアウト、回転、観点移動、または他の不規則な動きタイプなどの、非並進運動を表す2つ以上の動きベクトルを決定し得る。
【0061】
イントラ予測を実行するために、ビデオエンコーダ200は、イントラ予測モードを選択して予測ブロックを生成してよい。VVCのいくつかの例は、様々な方向モードを含む67個のイントラ予測モード、ならびに平面モードおよびDCモードを提供する。概して、ビデオエンコーダ200は、現在ブロックのサンプルをそこから予測すべき、現在ブロック(たとえば、CUのブロック)への隣接サンプルを記述するイントラ予測モードを選択する。そのようなサンプルは、概して、ビデオエンコーダ200がラスタ走査順序で(左から右に、上から下に)CTUおよびCUをコーディングすると想定すると、現在ブロックと同じピクチャの中の現在ブロックの上方、上方かつ左、または左にあってよい。
【0062】
ビデオエンコーダ200は、現在ブロックのための予測モードを表すデータを符号化する。たとえば、インター予測モードの場合、ビデオエンコーダ200は、様々な利用可能なインター予測モードのうちのどれが使用されるのか、ならびに対応するモードに対する動き情報を表すデータを符号化してよい。単方向または双方向インター予測の場合、たとえば、ビデオエンコーダ200は、高度動きベクトル予測(AMVP)モードまたはマージモードを使用して動きベクトルを符号化してよい。ビデオエンコーダ200は、アフィン動き補償モードのための動きベクトルを符号化するために類似のモードを使用してよい。
【0063】
ブロックのイントラ予測またはインター予測などの予測に続いて、ビデオエンコーダ200はブロックのための残差データを計算してよい。残差ブロックなどの残差データは、ブロックと、対応する予測モードを使用して形成されたそのブロックのための予測ブロックとの間の、サンプルごとの差分を表す。ビデオエンコーダ200は、サンプル領域ではなく変換領域において変換データを生成するために、1つまたは複数の変換を残差ブロックに適用してよい。たとえば、ビデオエンコーダ200は、離散コサイン変換(DCT)、整数変換、ウェーブレット変換、または概念的に類似の変換を残差ビデオデータに適用してよい。追加として、ビデオエンコーダ200は、モード依存非分離可能2次変換(MDNSST:mode-dependent non-separable secondary transform)、信号依存変換、カルーネンレーベ変換(KLT)などの2次変換を、最初の変換に続いて適用してよい。ビデオエンコーダ200は、1つまたは複数の変換の適用に続いて変換係数を生成する。
【0064】
上述のように、変換係数を生成するための任意の変換に続いて、ビデオエンコーダ200は、変換係数の量子化を実行してよい。量子化とは、一般に、変換係数を表すために使用されるデータの量をできる限り低減するために変換係数が量子化され、さらなる圧縮を行うプロセスを指す。量子化プロセスを実行することによって、ビデオエンコーダ200は、変換係数の一部または全部に関連するビット深度を低減し得る。たとえば、ビデオエンコーダ200は、量子化の間にnビット値をmビット値に切り捨ててよく、ここで、nはmよりも大きい。いくつかの例では、量子化を実行するために、ビデオエンコーダ200は、量子化されるべき値のビット単位の右シフトを実行してよい。
【0065】
量子化に続いて、ビデオエンコーダ200は、変換係数を走査してよく、量子化変換係数を含む2次元行列から1次元ベクトルを生成する。走査は、より高いエネルギー(したがって、より低い周波数)の変換係数をベクトルの前方に置き、より低いエネルギー(したがって、より高い周波数)の変換係数をベクトルの後方に置くように設計され得る。いくつかの例では、ビデオエンコーダ200は、量子化変換係数を走査してシリアル化ベクトルを生成するために既定の走査順序を利用してよく、次いで、ベクトルの量子化変換係数をエントロピー符号化してよい。他の例では、ビデオエンコーダ200は適応走査を実行してよい。量子化変換係数を走査して1次元ベクトルを形成した後、ビデオエンコーダ200は、たとえば、コンテキスト適応型バイナリ算術コーディング(CABAC)に従って、1次元ベクトルをエントロピー符号化してよい。ビデオエンコーダ200はまた、ビデオデータを復号する際のビデオデコーダ300による使用のために、符号化ビデオデータに関連するメタデータを記述するシンタックス要素のための値をエントロピー符号化してよい。
【0066】
CABACを実行するために、ビデオエンコーダ200は、コンテキストモデル内のコンテキストを、送信されるべきシンボルに割り当ててよい。コンテキストは、たとえば、シンボルの隣接値がゼロ値化されているか否かに関係し得る。確率決定は、シンボルに割り当てられたコンテキストに基づき得る。
【0067】
ビデオエンコーダ200は、たとえば、ピクチャヘッダ、ブロックヘッダ、スライスヘッダ、またはシーケンスパラメータセット(SPS)、ピクチャパラメータセット(PPS)、もしくはビデオパラメータセット(VPS)などの他のシンタックスデータの中で、ビデオデコーダ300へのブロックベースのシンタックスデータ、ピクチャベースのシンタックスデータ、およびシーケンスベースのシンタックスデータなどのシンタックスデータをさらに生成してよい。ビデオデコーダ300は、そのようなシンタックスデータを同様に復号して、対応するビデオデータをどのように復号すべきかを決定してよい。
【0068】
このようにして、ビデオエンコーダ200は、符号化ビデオデータ、たとえば、ブロック(たとえば、CU)へのピクチャの区分ならびにブロックのための予測情報および/または残差情報を記述するシンタックス要素を含む、ビットストリームを生成し得る。最終的に、ビデオデコーダ300は、ビットストリームを受信してよく、符号化ビデオデータを復号してよい。
【0069】
概して、ビデオデコーダ300は、ビデオエンコーダ200によって実行されるプロセスへの相反プロセスを実行して、ビットストリームの符号化ビデオデータを復号する。たとえば、ビデオデコーダ300は、ビデオエンコーダ200のCABAC符号化プロセスとは相反ではあるが実質的に類似の方法で、CABACを使用してビットストリームのシンタックス要素に対する値を復号してよい。シンタックス要素は、CTUへのピクチャの区分およびQTBT構造などの対応する区分構造による各CTUの区分のための、区分情報を規定して、CTUのCUを規定し得る。シンタックス要素は、ビデオデータのブロック(たとえば、CU)に対する予測情報および残差情報をさらに規定し得る。
【0070】
残差情報は、たとえば、量子化変換係数によって表され得る。ビデオデコーダ300は、ブロックの量子化変換係数を逆量子化および逆変換して、ブロックのための残差ブロックを再生してよい。ビデオデコーダ300は、シグナリングされた予測モード(イントラ予測またはインター予測)および関連する予測情報(たとえば、インター予測に対する動き情報)を使用して、ブロックのための予測ブロックを形成する。ビデオデコーダ300は、次いで、予測ブロックと残差ブロックとを(サンプルごとに)結合して元のブロックを再生してよい。ビデオデコーダ300は、ブロックの境界に沿った視覚アーティファクトを低減するためのデブロッキングプロセスを実行するなどの、追加の処理を実行してよい。
【0071】
本開示の技法によれば、ビデオエンコーダ200およびビデオデコーダ300は、双方向オプティカルフロー(BDOF)を実行するように構成され得る。たとえば、ビデオエンコーダ200は、現在ブロックを符号化することの一部としてBDOFを実行するように構成されてよく、ビデオデコーダ300は、現在ブロックを復号することの一部としてBDOFを実行するように構成されてよい。
【0072】
より詳細に説明するように、いくつかの例では、ビデオコーダ(たとえば、ビデオエンコーダ200および/またはビデオデコーダ300)は、入力ブロックを複数のサブブロックに分割することであって、入力ブロックのサイズがコーディングユニットのサイズよりも小さいかまたはそれに等しいことと、複数のサブブロックのうちのサブブロックに双方向オプティカルフロー(BDOF)が適用されることになることを、条件が満たされることに基づいて決定することと、サブブロックを複数のサブサブブロックに分割することと、サブサブブロックのうちの1つまたは複数に対して、改善された動きベクトルを決定することであって、1つまたは複数のサブサブブロックのうちのサブサブブロックに対する改善された動きベクトルが、サブサブブロックの中の複数のサンプルにとって同じであることと、1つまたは複数のサブサブブロックに対する改善された動きベクトルに基づいてサブブロックに対してBDOFを実行することとを行うように構成され得る。
【0073】
別の例として、ビデオコーダは、入力ブロックを複数のサブブロックに分割することであって、入力ブロックのサイズがコーディングユニットのサイズよりも小さいかまたはそれに等しいことと、複数のサブブロックのうちのサブブロックに双方向オプティカルフロー(BDOF)が適用されることになることを、条件が満たされることに基づいて決定することと、サブブロックを複数のサブサブブロックに分割することと、サブブロックの中の1つまたは複数のサンプルの各々に対して、改善された動きベクトルを決定することと、サブブロックの中の1つまたは複数のサンプルの各々に対する改善された動きベクトルに基づいてサブブロックに対してBDOFを実行することとを行うように構成され得る。
【0074】
たとえば、上記で説明したように、ビデオエンコーダ200またはビデオデコーダ300は、サブブロックの中の1つまたは複数のサンプルの各々に対して、改善された動きベクトルを決定してよく、サブブロックの中の1つまたは複数のサンプルの各々に対する改善された動きベクトルに基づいてBDOFを実行してよい。本開示では、サブブロックの中の1つまたは複数のサンプルの各々に対する改善された動きベクトルに基づいてBDOFを実行することは、「ピクセル単位BDOF」と呼ばれる。たとえば、ピクセル単位BDOFでは、サブブロックの中のすべてのサンプルにとって同じである改善された1つの動きベクトルを有するのではなく、サブブロックの中の各サンプルに対する改善された動きベクトルは別個に決定される。
【0075】
改善された動きベクトルは、必ずしもサブブロックのための動きベクトルが変更されることを意味し得るとは限らない。むしろ、サンプルのための改善された動きベクトルは、予測サンプルを生成するために予測ブロックの中のサンプルが調整される量を決定するために使用され得る。たとえば、第1のサブブロックの第1のサンプルに対して、第1の改善された動きベクトルは、第1の予測サンプルを生成するために予測ブロックの中の第1のサンプルをどのくらい調整すべきかを示してよく、第1のサブブロックの第2のサンプルに対して、第2の改善された動きベクトルは、第2の予測サンプルを生成するために予測ブロックの中の第2のサンプルをどのくらい調整すべきかを示してよく、以下同様である。
【0076】
本開示で説明する1つまたは複数の例によれば、ビデオエンコーダ200およびビデオデコーダ300は、ブロック(たとえば、入力ブロック)の1つまたは複数のサブブロックの各サブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定してよい。たとえば、上記で説明したように、ビデオエンコーダ200およびビデオデコーダ300は、条件が満たされることに基づいてピクセル単位BDOFを実行してよい。条件が満たされることとは、サブブロックに対するひずみ値がしきい値よりも大きいかどうかであってよい。
【0077】
したがって、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300にとってのオプションは、サブブロックに対するひずみ値がしきい値よりも大きいかそれともしきい値以下であるかに基づいて、サブブロックに対してピクセル単位BDOFを実行することまたはBDOFをバイパスすることのいずれかに設定され得る。たとえば、いくつかの技法では、ビデオエンコーダ200およびビデオデコーダ300が、ピクセル単位BDOFを実行するが、BDOFがバイパスされるかどうかをサブブロックごとに決定しないことが可能であり得る。サブブロックごとにBDOFがバイパスされ得るいくつかの技法では、ピクセル単位BDOFが利用可能でなかったことがあり得る。本開示で説明する例示的な技法を用いて、ビデオエンコーダ200およびビデオデコーダ300は、選択的にピクセル単位BDOFを実行するかまたはBDOFをバイパスするように構成されてよく、そのことは、適切に復号オーバーヘッドのバランスをとる、より良好なビデオ圧縮をもたらし得る。
【0078】
1つまたは複数の例では、それぞれ、ビデオデータを符号化または復号するために、ビデオエンコーダ200およびビデオデコーダ300は、ビデオデータのブロックに対してBDOFが有効化されることを決定し、ブロックに対してBDOFが有効化されるという決定に基づいて、またはより一般には、ブロックに対してBDOFが有効化されるとき、ブロックを複数のサブブロックに分割するように構成され得る。ビデオエンコーダ200およびビデオデコーダ300は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定してよい。それぞれのひずみ値を決定するための例示的な方法が、以下でより詳細に説明される。ビデオエンコーダ200およびビデオデコーダ300は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定してよく、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定してよい。
【0079】
ビデオエンコーダ200は、予測サンプルとブロックのサンプルとの間の差分を示す残差値を決定してよく、残差値をシグナリングしてよい。ビデオデコーダ300は、予測サンプルとブロックのサンプルとの間の差分を示す残差値を受信してよく、残差値を予測サンプルに加算してブロックを再構成してよい。いくつかの例では、残差値を受信するために、ビデオデコーダ300は、残差値を示す情報を受信するように構成されてよく、ビデオデコーダ300は、そうした情報から残差値を決定する。
【0080】
本開示は、概して、シンタックス要素などのいくつかの情報を「シグナリング」することに言及することがある。「シグナリング」という用語は、一般に、符号化ビデオデータを復号するために使用されるシンタックス要素および/または他のデータに対する値の通信を指してよい。すなわち、ビデオエンコーダ200は、ビットストリームの中でシンタックス要素に対する値をシグナリングし得る。概して、シグナリングとは、ビットストリームの中で値を生成することを指す。上述のように、ソースデバイス102は、実質的にリアルタイムで、または宛先デバイス116によって後で取り出すためにシンタックス要素を記憶デバイス112に記憶するときに行われ得るようなリアルタイムではなく、ビットストリームを宛先デバイス116にトランスポートし得る。
【0081】
図2Aおよび図2Bは、例示的な4分木2分木(QTBT)構造130および対応するコーディングツリーユニット(CTU)132を示す概念図である。実線は4分木分割を表し、点線は2分木分割を示す。2分木の分割された(すなわち、非リーフ)各ノードでは、どの分割タイプ(すなわち、水平または垂直)が使用されるのかを示すために1つのフラグがシグナリングされ、ここで、この例では、0が水平分割を示し、1が垂直分割を示す。4分木分割の場合、4分木ノードはブロックをサイズが等しい4つのサブブロックに水平および垂直に分割するので、分割タイプを示す必要はない。したがって、QTBT構造130の領域木レベル(すなわち、実線)のための(分割情報などの)シンタックス要素、およびQTBT構造130の予測木レベル(すなわち、破線)のための(分割情報などの)シンタックス要素を、ビデオエンコーダ200が符号化してよくビデオデコーダ300が復号してよい。QTBT構造130の末端リーフノードによって表されるCUのための、予測データおよび変換データなどのビデオデータを、ビデオエンコーダ200が符号化してよくビデオデコーダ300が復号してよい。
【0082】
一般に、図2BのCTU132は、第1のレベルおよび第2のレベルでQTBT構造130のノードに対応するブロックのサイズを規定するパラメータに関連し得る。これらのパラメータは、CTUサイズ(サンプルの中のCTU132のサイズを表す)、最小4分木サイズ(MinQTSize、許容される最小の4分木リーフノードサイズを表す)、最大2分木サイズ(MaxBTSize、許容される最大の2分木ルートノードサイズを表す)、最大2分木深度(MaxBTDepth、許容される最大の2分木深度を表す)、および最小2分木サイズ(MinBTSize、許容される最小の2分木リーフノードサイズを表す)を含んでよい。
【0083】
CTUに対応するQTBT構造のルートノードは、QTBT構造の第1のレベルにおいて4個の子ノードを有してよく、子ノードの各々は、4分木区分に従って区分されてよい。すなわち、第1のレベルのノードは、(子ノードを有しない)リーフノードであるか、4個の子ノードを有するかのいずれかである。QTBT構造130の例は、分岐のための実線を有する親ノードおよび子ノードを含むようなノードを表す。第1のレベルのノードが、許容される最大の2分木ルートノードサイズ(MaxBTSize)よりも大きくない場合、ノードはそれぞれの2分木によってさらに区分されてよい。分割の結果として生じるノードが、許容される最小の2分木リーフノードサイズ(MinBTSize)または許容される最大の2分木深度(MaxBTDepth)に達するまで、1つのノードの2分木分割が反復され得る。QTBT構造130の例は、分岐のための破線を有するようなノードを表す。2分木リーフノードはコーディングユニット(CU)と呼ばれ、コーディングユニット(CU)は、それ以上の区分を伴わずに予測(たとえば、イントラピクチャ予測またはインターピクチャ予測)および変換のために使用される。上記で説明したように、CUは「ビデオブロック」または「ブロック」と呼ばれることもある。
【0084】
QTBT区分構造の一例では、CTUサイズは128×128(ルーマサンプルおよび2つの対応する64×64クロマサンプル)として設定され、MinQTSizeは16×16として設定され、MaxBTSizeは64×64として設定され、(幅と高さの両方に対する)MinBTSizeは4として設定され、MaxBTDepthは4として設定される。4分木リーフノードを生成するために、4分木区分が最初にCTUに適用される。4分木リーフノードは、16×16(すなわち、MinQTSize)から128×128(すなわち、CTUサイズ)までのサイズを有してよい。4分木リーフノードが128×128である場合、サイズがMaxBTSize(すなわち、この例では64×64)を超えるので、4分木リーフノードは2分木によってそれ以上分割されない。そうでない場合、4分木リーフノードは2分木によってさらに区分される。したがって、4分木リーフノードは2分木のためのルートノードでもあり、0としての2分木深度を有する。2分木深度がMaxBTDepth(この例では4)に達すると、さらなる分割は許容されない。MinBTSize(この例では4)に等しい幅を有する2分木ノードは、その2分木ノードに対してそれ以上の垂直分割(すなわち、幅の分割)が許容されないことを暗示する。同様に、MinBTSizeに等しい高さを有する2分木ノードは、その2分木ノードに対してそれ以上の水平分割(すなわち、高さの分割)が許容されないことを暗示する。上述のように、2分木のリーフノードはCUと呼ばれ、それ以上の区分を伴わずに予測および変換に従ってさらに処理される。
【0085】
図3は、本開示の技法を実行し得る例示的なビデオエンコーダ200を示すブロック図である。図3は説明のために提供され、本開示において広く例示および説明するような技法の限定と見なされるべきでない。説明のために、本開示は、VVC(開発中のITU-T H.266)およびHEVC(ITU-T H.265)の技法によるビデオエンコーダ200を説明する。しかしながら、本開示の技法は、他のビデオコーディング規格に対して構成されているビデオ符号化デバイスによって実行され得る。
【0086】
図3の例では、ビデオエンコーダ200は、ビデオデータメモリ230、モード選択ユニット202、残差生成ユニット204、変換処理ユニット206、量子化ユニット208、逆量子化ユニット210、逆変換処理ユニット212、再構成ユニット214、フィルタユニット216、復号ピクチャバッファ(DPB)218、およびエントロピー符号化ユニット220を含む。ビデオデータメモリ230、モード選択ユニット202、残差生成ユニット204、変換処理ユニット206、量子化ユニット208、逆量子化ユニット210、逆変換処理ユニット212、再構成ユニット214、フィルタユニット216、DPB218、およびエントロピー符号化ユニット220のいずれかまたはすべては、1つもしくは複数のプロセッサの中または処理回路構成の中に実装され得る。たとえば、ビデオエンコーダ200のユニットは、ハードウェア回路構成の一部としての1つもしくは複数の回路もしくは論理要素として、またはプロセッサ、ASIC、もしくはFPGAの一部として実装され得る。その上、ビデオエンコーダ200は、これらおよび他の機能を実行するための追加または代替のプロセッサまたは処理回路構成を含んでよい。
【0087】
ビデオデータメモリ230は、ビデオエンコーダ200の構成要素によって符号化されるべきビデオデータを記憶してよい。ビデオエンコーダ200は、たとえば、ビデオソース104(図1)から、ビデオデータメモリ230の中に記憶されたビデオデータを受信してよい。DPB218は、ビデオエンコーダ200による後続のビデオデータの予測における使用のために参照ビデオデータを記憶する、参照ピクチャメモリとして作用してよい。ビデオデータメモリ230およびDPB218は、同期DRAM(SDRAM)を含むダイナミックランダムアクセスメモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのいずれかによって形成され得る。ビデオデータメモリ230およびDPB218は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、ビデオデータメモリ230は、図示したように、ビデオエンコーダ200の他の構成要素とともにオンチップであってよく、またはそれらの構成要素に対してオフチップであってもよい。
【0088】
本開示では、ビデオデータメモリ230への言及は、そのように特に記載されない限り、ビデオエンコーダ200の内部のメモリに、またはそのように特に記載されない限り、ビデオエンコーダ200の外部のメモリに限定されるものとして、解釈されるべきではない。むしろ、ビデオデータメモリ230への言及は、符号化するためにビデオエンコーダ200が受信するビデオデータ(たとえば、符号化されることになる現在ブロックのためのビデオデータ)を記憶する参照メモリとして理解されるべきである。図1のメモリ106はまた、ビデオエンコーダ200の様々なユニットからの出力の一時的な記憶域を提供し得る。
【0089】
図3の様々なユニットは、ビデオエンコーダ200によって実行される動作を理解する助けとなるために示される。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実装され得る。固定機能回路は、特定の機能性を提供する回路を指し、実行され得る動作に対して事前設定される。プログラマブル回路は、様々なタスクを実行するようにプログラムされ得る回路を指し、実行され得る動作においてフレキシブルな機能性を提供する。たとえば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって規定される方式でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は(たとえば、パラメータを受信するかまたはパラメータを出力するための)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは一般に不変である。いくつかの例では、ユニットのうちの1つまたは複数は異なる回路ブロック(固定機能またはプログラマブル)であってよく、いくつかの例では、ユニットのうちの1つまたは複数は集積回路であってよい。
【0090】
ビデオエンコーダ200は、算術論理ユニット(ALU)、初等関数ユニット(EFU)、デジタル回路、アナログ回路、および/またはプログラマブル回路から形成されたプログラマブルコアを含んでよい。ビデオエンコーダ200の動作が、プログラマブル回路によって実行されるソフトウェアを使用して実行される例では、メモリ106(図1)が、ビデオエンコーダ200が受信および実行するソフトウェアの命令(たとえば、オブジェクトコード)を記憶してよく、またはビデオエンコーダ200内の別のメモリ(図示せず)が、そのような命令を記憶してもよい。
【0091】
ビデオデータメモリ230は、受信されたビデオデータを記憶するように構成される。ビデオエンコーダ200は、ビデオデータメモリ230からビデオデータのピクチャを取り出してよく、ビデオデータを残差生成ユニット204およびモード選択ユニット202に提供してよい。ビデオデータメモリ230の中のビデオデータは、符号化されることになる未加工ビデオデータであってよい。
【0092】
モード選択ユニット202は、動き推定ユニット222、動き補償ユニット224、およびイントラ予測ユニット226を含む。モード選択ユニット202は、他の予測モードに従ってビデオ予測を実行するための追加の機能ユニットを含んでよい。例として、モード選択ユニット202は、パレットユニット、(動き推定ユニット222および/または動き補償ユニット224の一部であり得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニットなどを含んでよい。
【0093】
モード選択ユニット202は、一般に、符号化パラメータの組合せおよびそのような組合せに対する結果として生じるレートひずみ値をテストするために複数の符号化パスを協調させる。符号化パラメータは、CUへのCTUの区分、CUのための予測モード、CUの残差データのための変換タイプ、CUの残差データのための量子化パラメータなどを含んでよい。モード選択ユニット202は、テストされた他の組合せよりもレートひずみ値が良好な符号化パラメータの組合せを最終的に選択してよい。
【0094】
ビデオエンコーダ200は、ビデオデータメモリ230から取り出されたピクチャを一連のCTUに区分してよく、1つまたは複数のCTUをスライス内にカプセル化してよい。モード選択ユニット202は、上記で説明したHEVCのQTBT構造または4分木構造などのツリー構造に従ってピクチャのCTUを区分し得る。上記で説明したように、ビデオエンコーダ200は、ツリー構造に従ってCTUを区分することから1つまたは複数のCUを形成し得る。そのようなCUは、一般に、「ビデオブロック」または「ブロック」と呼ばれることもある。
【0095】
概して、モード選択ユニット202はまた、現在ブロック(たとえば、現在CU、またはHEVCでは、PUおよびTUの重複する部分)のための予測ブロックを生成するために、その構成要素(たとえば、動き推定ユニット222、動き補償ユニット224、およびイントラ予測ユニット226)を制御する。現在ブロックのインター予測の場合、動き推定ユニット222は、1つまたは複数の参照ピクチャ(たとえば、DPB218の中に記憶された1つまたは複数の以前にコーディングされたピクチャ)の中の密に整合する1つまたは複数の参照ブロックを識別するために動き探索を実行してよい。詳細には、動き推定ユニット222は、たとえば、絶対差分和(SAD)、2乗差分和(SSD)、平均絶対差(MAD)、平均2乗差(MSD)などに従って、可能な参照ブロックが現在ブロックにどのくらい類似しているのかを表す値を計算し得る。動き推定ユニット222は、概して、現在ブロックと検討中の参照ブロックとの間のサンプルごとの差分を使用して、これらの計算を実行してよい。動き推定ユニット222は、現在ブロックに最も密に整合する参照ブロックを示す、これらの計算の結果として生じる最も小さい値を有する参照ブロックを識別し得る。
【0096】
動き推定ユニット222は、現在ピクチャの中の現在ブロックの位置に対する参照ピクチャ中の参照ブロックの位置を規定する1つまたは複数の動きベクトル(MV)を形成し得る。動き推定ユニット222は、次いで、動きベクトルを動き補償ユニット224に提供し得る。たとえば、単方向インター予測の場合、動き推定ユニット222は単一の動きベクトルを提供し得るが、双方向インター予測の場合、動き推定ユニット222は2つの動きベクトルを提供し得る。動き補償ユニット224は、次いで、動きベクトルを使用して予測ブロックを生成し得る。たとえば、動き補償ユニット224は、動きベクトルを使用して参照ブロックのデータを取り出してよい。別の例として、動きベクトルが分数サンプル精度を有する場合、動き補償ユニット224は、1つまたは複数の補間フィルタに従って予測ブロックに対する値を補間してよい。その上、双方向インター予測の場合、動き補償ユニット224は、それぞれの動きベクトルによって識別された2つの参照ブロックのためのデータを取り出してよく、たとえば、サンプルごとの平均化または重み付き平均化を通じて、取り出されたデータを結合してよい。
【0097】
別の例として、イントラ予測またはイントラ予測コーディングの場合、イントラ予測ユニット226は、現在ブロックに隣接するサンプルから予測ブロックを生成してよい。たとえば、方向モードの場合、イントラ予測ユニット226は、一般に、隣接サンプルの値を数学的に結合してよく、計算されたこれらの値を現在ブロックにわたる定義された方向に分布させて、予測ブロックを生成してよい。別の例として、DCモードの場合、イントラ予測ユニット226は、現在ブロックに対する隣接サンプルの平均を計算してよく、予測ブロックの各サンプルに対して結果として生じるこの平均を含めるべき予測ブロックを生成し得る。
【0098】
モード選択ユニット202は、予測ブロックを残差生成ユニット204に提供する。残差生成ユニット204は、ビデオデータメモリ230から現在ブロックの未加工の符号化されていないバージョンを、またモード選択ユニット202から予測ブロックを受信する。残差生成ユニット204は、現在ブロックと予測ブロックとの間のサンプルごとの差分を計算する。結果として生じるサンプルごとの差分は、現在ブロックに対する残差ブロックを規定する。いくつかの例では、残差生成ユニット204はまた、残差差分パルスコード変調(RDPCM:residual differential pulse code modulation)を使用して残差ブロックを生成するために、残差ブロックの中のサンプル値の間の差分を決定し得る。いくつかの例では、残差生成ユニット204は、バイナリ減算を実行する1つまたは複数の減算器回路を使用して形成され得る。
【0099】
モード選択ユニット202がCUをPUに区分する例では、各PUはルーマ予測ユニットおよび対応するクロマ予測ユニットに関連付けられてよい。ビデオエンコーダ200およびビデオデコーダ300は、様々なサイズを有するPUをサポートし得る。上記で示したように、CUのサイズは、CUのルーマコーディングブロックのサイズを指すことがあり、PUのサイズは、PUのルーマ予測ユニットのサイズを指すことがある。特定のCUのサイズが2N×2Nであることを想定すると、ビデオエンコーダ200は、イントラ予測に対して2N×2NまたはN×NというPUサイズ、およびインター予測に対して2N×2N、2N×N、N×2N、N×N、または類似の、対称のPUサイズをサポートし得る。ビデオエンコーダ200およびビデオデコーダ300はまた、インター予測に対して、2N×nU、2N×nD、nL×2N、およびnR×2NというPUサイズのための非対称区分をサポートし得る。
【0100】
モード選択ユニット202がそれ以上CUをPUに区分しない例では、各CUはルーマコーディングブロックおよび対応するクロマコーディングブロックに関連付けられてよい。上記のように、CUのサイズは、CUのルーマコーディングブロックのサイズを指すことがある。ビデオエンコーダ200およびビデオデコーダ300は、2N×2N、2N×N、またはN×2NというCUサイズをサポートしてよい。
【0101】
いくつかの例として、イントラブロックコピーモードコーディング、アフィンモードコーディング、および線形モデル(LM)モードコーディングなどの、他のビデオコーディング技法のために、モード選択ユニット202は、コーディング技法に関連するそれぞれのユニットを介して、符号化されつつある現在ブロックのための予測ブロックを生成する。パレットモードコーディングなどのいくつかの例では、モード選択ユニット202は、予測ブロックを生成しなくてよく、代わりに、選択されたパレットに基づいてブロックを再構成するための方式を示すシンタックス要素を生成してよい。そのようなモードでは、モード選択ユニット202は、符号化されるべきこれらのシンタックス要素をエントロピー符号化ユニット220に提供し得る。
【0102】
上記で説明したように、残差生成ユニット204は、現在ブロックおよび対応する予測ブロックのためのビデオデータを受信する。残差生成ユニット204は、次いで、現在ブロックのための残差ブロックを生成する。残差ブロックを生成するために、残差生成ユニット204は、予測ブロックと現在ブロックとの間のサンプルごとの差分を計算する。
【0103】
変換処理ユニット206は、変換係数のブロック(本明細書で「変換係数ブロック」と呼ばれる)を生成するために、1つまたは複数の変換を残差ブロックに適用する。変換処理ユニット206は、変換係数ブロックを形成するために、様々な変換を残差ブロックに適用し得る。たとえば、変換処理ユニット206は、離散コサイン変換(DCT)、方向変換、カルーネンレーベ変換(KLT)、または概念的に類似の変換を残差ブロックに適用し得る。いくつかの例では、変換処理ユニット206は、複数の変換、たとえば、回転変換などの1次変換および2次変換を、残差ブロックに対して実行してよい。いくつかの例では、変換処理ユニット206は、変換を残差ブロックに適用しない。
【0104】
量子化ユニット208は、変換係数ブロックの中で変換係数を量子化して量子化変換係数ブロックを生成してよい。量子化ユニット208は、現在ブロックに関連する量子化パラメータ(QP)値に従って変換係数ブロックの変換係数を量子化し得る。ビデオエンコーダ200は(たとえば、モード選択ユニット202を介して)、CUに関連するQP値を調整することによって、現在ブロックに関連する変換係数ブロックに適用される量子化の程度を調整し得る。量子化は情報の損失をもたらすことがあり、したがって、量子化変換係数は変換処理ユニット206によって生成された元の変換係数よりも低い精度を有することがある。
【0105】
逆量子化ユニット210および逆変換処理ユニット212は、それぞれ、逆量子化および逆変換を量子化変換係数ブロックに適用して、変換係数ブロックから残差ブロックを再構成し得る。再構成ユニット214は、再構成された残差ブロックおよびモード選択ユニット202によって生成された予測ブロックに基づいて、(潜在的にいくらかの程度のひずみを伴うが)現在ブロックに対応する再構成ブロックを生成し得る。たとえば、再構成ユニット214は、再構成された残差ブロックのサンプルを、モード選択ユニット202によって生成された予測ブロックからの対応するサンプルに加算して、再構成ブロックを生成し得る。
【0106】
フィルタユニット216は、再構成ブロックに対して1つまたは複数のフィルタ動作を実行してよい。たとえば、フィルタユニット216は、CUのエッジに沿ったブロッキネスアーティファクトを低減するためにデブロッキング動作を実行し得る。いくつかの例では、フィルタユニット216の動作はスキップされ得る。
【0107】
ビデオエンコーダ200は、再構成ブロックをDPB218の中に記憶する。たとえば、フィルタユニット216の動作が実行されない例では、再構成ユニット214が、再構成ブロックをDPB218に記憶し得る。フィルタユニット216の動作が実行される例では、フィルタユニット216が、フィルタ処理された再構成ブロックをDPB218に記憶し得る。動き推定ユニット222および動き補償ユニット224は、後で符号化されるピクチャのブロックをインター予測するために、再構成された(かつ、潜在的にフィルタ処理された)ブロックから形成された参照ピクチャをDPB218から取り出し得る。加えて、イントラ予測ユニット226は、現在ピクチャの中の他のブロックをイントラ予測するために、現在ピクチャの、DPB218の中の再構成ブロックを使用し得る。
【0108】
概して、エントロピー符号化ユニット220は、ビデオエンコーダ200の他の機能構成要素から受信されたシンタックス要素をエントロピー符号化し得る。たとえば、エントロピー符号化ユニット220は、量子化ユニット208からの量子化変換係数ブロックをエントロピー符号化し得る。別の例として、エントロピー符号化ユニット220は、モード選択ユニット202からの予測シンタックス要素(たとえば、インター予測のための動き情報またはイントラ予測のためのイントラモード情報)をエントロピー符号化し得る。エントロピー符号化ユニット220は、ビデオデータの別の例であるシンタックス要素に対して1つまたは複数のエントロピー符号化動作を実行して、エントロピー符号化データを生成し得る。たとえば、エントロピー符号化ユニット220は、コンテキスト適応型可変長コーディング(CAVLC)動作、CABAC動作、可変対可変(V2V)長コーディング動作、シンタックスベースのコンテキスト適応型バイナリ算術コーディング(SBAC)動作、確率間隔区分エントロピー(PIPE)コーディング動作、指数ゴロム符号化動作、または別のタイプのエントロピー符号化動作をデータに対して実行し得る。いくつかの例では、エントロピー符号化ユニット220は、シンタックス要素がエントロピー符号化されないバイパスモードで動作し得る。
【0109】
ビデオエンコーダ200は、スライスまたはピクチャのブロックを再構成するために必要とされるエントロピー符号化シンタックス要素を含むビットストリームを出力し得る。詳細には、エントロピー符号化ユニット220がビットストリームを出力してよい。
【0110】
上記で説明した動作はブロックに関して説明される。そのような説明は、ルーマコーディングブロックおよび/またはクロマコーディングブロックのための動作であるものとして理解されるべきである。上記で説明したように、いくつかの例では、ルーマコーディングブロックおよびクロマコーディングブロックは、CUのルーマ成分およびクロマ成分である。いくつかの例では、ルーマコーディングブロックおよびクロマコーディングブロックは、PUのルーマ成分およびクロマ成分である。
【0111】
いくつかの例では、ルーマコーディングブロックに関して実行される動作は、クロマコーディングブロックのために反復される必要はない。一例として、ルーマコーディングブロックのための動きベクトル(MV)および参照ピクチャを識別するための動作は、クロマブロックのためのMVおよび参照ピクチャを識別するために反復される必要はない。むしろ、ルーマコーディングブロックのためのMVは、クロマブロックのためのMVを決定するためにスケーリングされてよく、参照ピクチャは同じであってよい。別の例として、イントラ予測プロセスは、ルーマコーディングブロックおよびクロマコーディングブロックに対して同じであってよい。
【0112】
ビデオエンコーダ200は、ビデオデータを記憶するように構成されたメモリと、回路構成の中に実装された1つまたは複数の処理ユニットとを含む、ビデオデータを符号化するように構成されたデバイスの一例を表し、1つまたは複数の処理ユニットは、入力ブロックを複数のサブブロックに分割することであって、入力ブロックのサイズがコーディングユニットのサイズよりも小さいかまたはそれに等しいことと、複数のサブブロックのうちのサブブロックに双方向オプティカルフロー(BDOF)が適用されることになることを、条件が満たされることに基づいて決定することと、サブブロックを複数のサブサブブロックに分割することと、サブサブブロックのうちの1つまたは複数に対して、改善された動きベクトルを決定することであって、1つまたは複数のサブサブブロックのうちのサブサブブロックに対する改善された動きベクトルが、サブサブブロックの中の複数のサンプルにとって同じであることと、1つまたは複数のサブサブブロックに対する改善された動きベクトルに基づいてサブブロックに対してBDOFを実行することとを行うように構成される。
【0113】
別の例として、回路構成の中に実装された1つまたは複数の処理ユニットは、入力ブロックを複数のサブブロックに分割することであって、入力ブロックのサイズがコーディングユニットのサイズよりも小さいかまたはそれに等しいことと、複数のサブブロックのうちのサブブロックに双方向オプティカルフロー(BDOF)が適用されることになることを、条件が満たされることに基づいて決定することと、サブブロックを複数のサブサブブロックに分割することと、サブブロックの中の1つまたは複数のサンプルの各々に対して、改善された動きベクトルを決定することと、サブブロックの中の1つまたは複数のサンプルの各々に対する改善された動きベクトルに基づいてサブブロックに対してBDOFを実行することとを行うように構成され得る。
【0114】
また別の例として、ビデオエンコーダ200の処理回路構成は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定し、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割し、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定し、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定し、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定し、予測サンプルとブロックとの間の差分を示す残差値を決定し、残差値を示す情報をシグナリングするように構成され得る。
【0115】
図4は、本開示の技法を実行し得る例示的なビデオデコーダ300を示すブロック図である。図4は説明のために提供され、本開示において広く例示および説明するような技法を限定するものではない。説明のために、本開示は、VVC(開発中のITU-T H.266)およびHEVC(ITU-T H.265)の技法によるビデオデコーダ300を説明する。しかしながら、本開示の技法は、他のビデオコーディング規格に対して構成されているビデオコーディングデバイスによって実行され得る。
【0116】
図4の例では、ビデオデコーダ300は、コード化ピクチャバッファ(CPB)メモリ320、エントロピー復号ユニット302、予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構成ユニット310、フィルタユニット312、および復号ピクチャバッファ(DPB)314を含む。CPBメモリ320、エントロピー復号ユニット302、予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構成ユニット310、フィルタユニット312、およびDPB314のうちのいずれかまたはすべては、1つもしくは複数のプロセッサの中または処理回路構成の中に実装され得る。たとえば、ビデオデコーダ300のユニットは、ハードウェア回路構成の一部としての1つもしくは複数の回路もしくは論理要素として、またはプロセッサ、ASIC、もしくはFPGAの一部として実装され得る。その上、ビデオデコーダ300は、これらおよび他の機能を実行するための追加または代替のプロセッサまたは処理回路構成を含んでよい。
【0117】
予測処理ユニット304は、動き補償ユニット316およびイントラ予測ユニット318を含む。予測処理ユニット304は、他の予測モードに従って予測を実行するための追加のユニットを含んでよい。例として、予測処理ユニット304は、パレットユニット、(動き補償ユニット316の一部を形成し得る)イントラブロックコピーユニット、アフィンユニット、線形モデル(LM)ユニットなどを含んでよい。他の例では、ビデオデコーダ300は、もっと多数の、もっと少数の、または異なる機能構成要素を含んでよい。
【0118】
CPBメモリ320は、ビデオデコーダ300の構成要素によって復号されるべき符号化ビデオビットストリームなどのビデオデータを記憶してよい。CPBメモリ320の中に記憶されたビデオデータは、たとえば、コンピュータ可読媒体110(図1)から取得され得る。CPBメモリ320は、符号化ビデオビットストリームからの符号化ビデオデータ(たとえば、シンタックス要素)を記憶するCPBを含んでよい。また、CPBメモリ320は、ビデオデコーダ300の様々なユニットからの出力を表す一時的なデータなどの、コード化ピクチャのシンタックス要素以外のビデオデータを記憶してよい。DPB314は、一般に、符号化ビデオビットストリームの後続のデータまたはピクチャを復号するときにビデオデコーダ300が参照ビデオデータとして出力および/または使用し得る復号ピクチャを記憶する。CPBメモリ320およびDPB314は、SDRAMを含むDRAM、MRAM、RRAM、または他のタイプのメモリデバイスなどの、様々なメモリデバイスのうちのいずれかによって形成され得る。CPBメモリ320およびDPB314は、同じメモリデバイスまたは別個のメモリデバイスによって提供され得る。様々な例では、CPBメモリ320は、ビデオデコーダ300の他の構成要素とともにオンチップであってよく、またはそれらの構成要素に対してオフチップであってもよい。
【0119】
追加または代替として、いくつかの例では、ビデオデコーダ300は、メモリ120(図1)からコード化ビデオデータを取り出し得る。すなわち、メモリ120は、CPBメモリ320を用いて上記で説明したようなデータを記憶し得る。同様に、メモリ120は、ビデオデコーダ300の機能性の一部または全部がビデオデコーダ300の処理回路構成によって実行されるべきソフトウェアで実装されるとき、ビデオデコーダ300によって実行されるべき命令を記憶してよい。
【0120】
図4に示す様々なユニットは、ビデオデコーダ300によって実行される動作を理解する助けとなるために示される。ユニットは、固定機能回路、プログラマブル回路、またはそれらの組合せとして実装され得る。図3と同様に、固定機能回路は、特定の機能性を提供する回路を指し、実行され得る動作に対して事前設定される。プログラマブル回路は、様々なタスクを実行するようにプログラムされ得る回路を指し、実行され得る動作においてフレキシブルな機能性を提供する。たとえば、プログラマブル回路は、ソフトウェアまたはファームウェアの命令によって規定される方式でプログラマブル回路を動作させるソフトウェアまたはファームウェアを実行し得る。固定機能回路は(たとえば、パラメータを受信するかまたはパラメータを出力するための)ソフトウェア命令を実行し得るが、固定機能回路が実行する動作のタイプは一般に不変である。いくつかの例では、ユニットのうちの1つまたは複数は異なる回路ブロック(固定機能またはプログラマブル)であってよく、いくつかの例では、ユニットのうちの1つまたは複数は集積回路であってよい。
【0121】
ビデオデコーダ300は、ALU、EFU、デジタル回路、アナログ回路、および/またはプログラマブル回路から形成されたプログラマブルコアを含んでよい。ビデオデコーダ300の動作が、プログラマブル回路上で実行するソフトウェアによって実行される例では、オンチップメモリまたはオフチップメモリが、ビデオデコーダ300が受信および実行するソフトウェアの命令(たとえば、オブジェクトコード)を記憶してよい。
【0122】
エントロピー復号ユニット302は、CPBから符号化ビデオデータを受信しビデオデータをエントロピー復号して、シンタックス要素を再生してよい。予測処理ユニット304、逆量子化ユニット306、逆変換処理ユニット308、再構成ユニット310、およびフィルタユニット312は、ビットストリームから抽出されたシンタックス要素に基づいて、復号ビデオデータを生成してよい。
【0123】
一般に、ビデオデコーダ300は、ブロックごとにピクチャを再構成する。ビデオデコーダ300は、各ブロックに対して個別に再構成動作を実行してよい(ここで、現在再構成されつつある、すなわち、復号されつつあるブロックは「現在ブロック」と呼ばれることがある)。
【0124】
エントロピー復号ユニット302は、量子化変換係数ブロックの量子化変換係数、ならびに量子化パラメータ(QP)および/または変換モード表示などの変換情報を規定する、シンタックス要素をエントロピー復号してよい。逆量子化ユニット306は、量子化変換係数ブロックに関連するQPを使用して、量子化の程度、および同様に逆量子化ユニット306が適用すべき逆量子化の程度を決定してよい。逆量子化ユニット306は、たとえば、量子化変換係数を逆量子化するために、ビット単位の左シフト演算を実行してよい。それによって、逆量子化ユニット306は、変換係数を含む変換係数ブロックを形成し得る。
【0125】
逆量子化ユニット306が変換係数ブロックを形成した後、逆変換処理ユニット308は、現在ブロックに関連する残差ブロックを生成するために、1つまたは複数の逆変換を変換係数ブロックに適用してよい。たとえば、逆変換処理ユニット308は、逆DCT、逆整数変換、逆カルーネンレーベ変換(KLT)、逆回転変換、逆方向変換、または別の逆変換を、変換係数ブロックに適用し得る。
【0126】
さらに、予測処理ユニット304は、エントロピー復号ユニット302によってエントロピー復号された予測情報シンタックス要素に従って予測ブロックを生成する。たとえば、現在ブロックがインター予測されることを予測情報シンタックス要素が示す場合、動き補償ユニット316が予測ブロックを生成し得る。この場合、予測情報シンタックス要素は、そこから参照ブロックを取り出すべきDPB314の中の参照ピクチャ、ならびに現在ピクチャの中の現在ブロックのロケーションに対する参照ピクチャの中の参照ブロックのロケーションを識別する動きベクトルを示し得る。動き補償ユニット316は、概して、動き補償ユニット224(図3)に関して説明した方式と実質的に類似の方式で、インター予測プロセスを実行し得る。
【0127】
別の例として、現在ブロックがイントラ予測されることを予測情報シンタックス要素が示す場合、イントラ予測ユニット318は、予測情報シンタックス要素によって示されたイントラ予測モードに従って予測ブロックを生成してよい。この場合も、イントラ予測ユニット318は、概して、イントラ予測ユニット226(図3)に関して説明した方式と実質的に類似の方式で、イントラ予測プロセスを実行してよい。イントラ予測ユニット318は、現在ブロックへの隣接サンプルのデータをDPB314から取り出し得る。
【0128】
再構成ユニット310は、予測ブロックおよび残差ブロックを使用して現在ブロックを再構成してよい。たとえば、再構成ユニット310は、残差ブロックのサンプルを予測ブロックの対応するサンプルに加算して現在ブロックを再構成してよい。
【0129】
フィルタユニット312は、再構成ブロックに対して1つまたは複数のフィルタ動作を実行してよい。たとえば、フィルタユニット312は、再構成ブロックのエッジに沿ったブロッキネスアーティファクトを低減するために、デブロッキング動作を実行してよい。フィルタユニット312の動作は、必ずしもすべての例において実行されるとは限らない。
【0130】
ビデオデコーダ300は、再構成ブロックをDPB314の中に記憶してよい。たとえば、フィルタユニット312の動作が実行されない例では、再構成ユニット310が、再構成ブロックをDPB314に記憶してよい。フィルタユニット312の動作が実行される例では、フィルタユニット312が、フィルタ処理された再構成ブロックをDPB314に記憶してよい。上記で説明したように、DPB314は、イントラ予測のための現在ピクチャおよび後続の動き補償のための以前に復号されたピクチャのサンプルなどの参照情報を、予測処理ユニット304に提供してよい。その上、ビデオデコーダ300は、図1のディスプレイデバイス118などのディスプレイデバイス上に後で提示するために、DPB314からの復号ピクチャ(たとえば、復号ビデオ)を出力してよい。
【0131】
このようにして、ビデオデコーダ300は、ビデオデータを記憶するように構成されたメモリと、回路構成の中に実装された1つまたは複数の処理ユニットとを含む、ビデオ復号デバイスの一例を表し、1つまたは複数の処理ユニットは、入力ブロックを複数のサブブロックに分割することであって、入力ブロックのサイズがコーディングユニットのサイズよりも小さいかまたはそれに等しいことと、複数のサブブロックのうちのサブブロックに双方向オプティカルフロー(BDOF)が適用されることになることを、条件が満たされることに基づいて決定することと、サブブロックを複数のサブサブブロックに分割することと、サブサブブロックのうちの1つまたは複数に対して、改善された動きベクトルを決定することであって、1つまたは複数のサブサブブロックのうちのサブサブブロックに対する改善された動きベクトルが、サブサブブロックの中の複数のサンプルにとって同じであることと、1つまたは複数のサブサブブロックに対する改善された動きベクトルに基づいてサブブロックに対してBDOFを実行することとを行うように構成される。
【0132】
別の例として、回路構成の中に実装された1つまたは複数の処理ユニットは、入力ブロックを複数のサブブロックに分割することであって、入力ブロックのサイズがコーディングユニットのサイズよりも小さいかまたはそれに等しいことと、複数のサブブロックのうちのサブブロックに双方向オプティカルフロー(BDOF)が適用されることになることを、条件が満たされることに基づいて決定することと、サブブロックを複数のサブサブブロックに分割することと、サブブロックの中の1つまたは複数のサンプルの各々に対して、改善された動きベクトルを決定することと、サブブロックの中の1つまたは複数のサンプルの各々に対する改善された動きベクトルに基づいてサブブロックに対してBDOFを実行することとを行うように構成され得る。
【0133】
別の例として、ビデオデコーダ300の処理回路構成(たとえば、動き補償ユニット316)は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定し、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割し、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定し、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定し、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定し、予測サンプルに基づいてブロックを再構成するように構成され得る。たとえば、処理回路構成は、予測サンプルとブロックのサンプルとの間の差分を示す残差値を受信してよく、残差値を予測サンプルに加算してブロックを再構成してよい。
【0134】
以下のことは、HEVCにおけるCU構造および動きベクトル予測を説明する。以下のことは、CUおよび動きベクトル予測の上記の説明に追加のコンテキストを提供することがあり、理解の助けとなるように上記の説明のいくつかの繰返しを含むことがある。
【0135】
HEVCでは、スライスの中の最も大きいコーディングユニットは、コーディングツリーブロック(CTB)またはコーディングツリーユニット(CTU)と呼ばれる。CTBは4分木を含み、4分木のノードがコーディングユニットである。CTBのサイズは、HEVCメインプロファイルでは(技術的には8×8のCTBサイズがサポートされ得るが)16×16から64×64までに及ぶことができる。コーディングユニット(CU)は、CTBの同じサイズから8×8と同程度に小さい場合がある。各コーディングユニットは、1つのモード、すなわち、インターモードまたはイントラモードを用いてコーディングされる。CUは、インターコーディングされるとき、2個もしくは4個の予測ユニット(PU)にさらに区分されてよく、またはそれ以上の区分が適用されないとき、ただ1つのPUになってもよい。1つのCUの中に2個のPUが存在するとき、それらはサイズが半分の長方形、またはCUの1/4もしくは3/4のサイズを有する2つの長方形であり得る。CUがインターコーディングされるとき、各PUは、固有のインター予測モードを用いて導出される、動き情報の1つのセットを有する。
【0136】
以下のことは動きベクトル予測を説明する。HEVC規格では、それぞれ、予測ユニット(PU)に対して、マージモード(スキップモードはマージモードの特別なケースと見なされる)および高度動きベクトル予測(AMVP)モードと名付けられた、2つのインター予測モードがある。
【0137】
AMVPモードまたはマージモードのいずれかにおいて、複数の動きベクトル予測子に対して動きベクトル(MV)候補リストが維持される。現在PUの動きベクトルならびにマージモードにおける参照インデックスは、MV候補リストから1つの候補を取ることによって生成される。
【0138】
MV候補リストは、マージモードのための最大5個の候補、およびAMVPモードのための2個だけの候補を含む。マージ候補は、動き情報のセット、たとえば、参照ピクチャリスト(リスト0およびリスト1)と参照インデックスの両方に対応する動きベクトルを含んでよい。マージインデックスによってマージ候補が識別される場合、現在ブロックの予測のために使用される参照ピクチャならびに関連する動きベクトルが決定される。一方、AMVPモードのもとでは、リスト0またはリスト1のいずれかからの可能な各予測方向に対して、AMVP候補が動きベクトルしか含まないので、参照インデックスは、MV候補リストへのMV予測子(MVP)インデックスと一緒に明示的にシグナリングされることになる。AMVPモードでは、予測された動きベクトルがさらに改善され得る。両方のモードのための候補は、同じ空間隣接ブロックおよび時間隣接ブロックから同様に導出される。
【0139】
以下のことは空間隣接候補を説明する。たとえば、図5Aおよび図5Bは、それぞれ、マージモードおよび高度動きベクトル予測子(AMVP)モードのための、空間隣接動きベクトル候補の例を示す概念図である。
【0140】
空間MV候補は、特定のPU(PU0)500に対して、図5Aおよび図5Bに示す隣接ブロックから導出されるが、ブロックから候補を生成する方法はマージモードおよびAMVPモードにとって異なる。マージモードでは、最大4個の空間MV候補が、番号を用いて図5Aに示す順序とともに導出されることが可能であり、その順序は、以下の通り、すなわち、図5Aに示すように、左(0,A1)、上(1,B1)、右上(2,B0)、左下(3,A0)、および左上(4,B2)である。
【0141】
AVMPモードでは、隣接ブロックは、図5Bの中のPU0 502に示すように、2つのグループ、すなわち、ブロック0および1からなる左のグループ、ならびにブロック2、3、および4からなる上のグループに分割される。各グループに対して、シグナリングされる参照インデックスによって示されるものと同じ参照ピクチャを参照する隣接ブロックの中の可能な候補が、グループの最終候補を形成するために選ばれるべき最高の優先度を有する。すべての隣接ブロックが、同じ参照ピクチャを指し示す動きベクトルを含まないことがあり得る。したがって、そのような候補が見つけられない場合、利用可能な最初の候補が、最終候補を形成するようにスケーリングされてよく、したがって、時間距離差が補償され得る。
【0142】
以下のことはHEVCにおける時間動きベクトル予測を説明する。時間動きベクトル予測子(TMVP)候補は、有効にされ利用可能である場合、空間動きベクトル候補の後にMV候補リストの中に追加される。TMVP候補のための動きベクトル導出のプロセスは、マージモードとAMVPモードの両方にとって同じであるが、マージモードにおけるTMVP候補に対するターゲット参照インデックスは、常に0に設定される。
【0143】
TMVP候補導出のための1次ブロックロケーションは、空間隣接候補を生成するために使用される、上のブロックおよび左のブロックへのバイアスを補償するための、ブロック602として示されるブロック「T」として図6Aに示すようにコロケートPUの外側の右下ブロックである。しかしながら、そのブロックが現在CTB行の外側に位置するか、または動き情報が利用可能でない場合、ブロックは、ブロック604として示すPUの中心ブロックと置換される。
【0144】
TMVP候補のための動きベクトルは、スライスレベルの中で示される、コロケートピクチャのコロケートPUから導出される。コロケートPUのための動きベクトルは、コロケートMVと呼ばれる。AVCにおける時間ダイレクトモードと同様に、TMVP候補動きベクトルを導出するために、コロケートMVは、図6Bに示すように、時間距離差を補償するようにスケーリングされることになる。
【0145】
以下のことはHEVCにおける動き予測の追加態様を説明する。マージモードおよびAMVPモードのいくつかの態様は、次のように述べる価値がある。動きベクトルスケーリング:動きベクトルの値がプレゼンテーション時間におけるピクチャの距離に比例することが想定される。動きベクトルは、2つのピクチャ、すなわち、参照ピクチャと動きベクトルを含むピクチャ(すなわち、格納ピクチャ)とを関連付ける。その動きベクトルが、他の動きベクトルを予測するために利用されるとき、格納ピクチャと参照ピクチャとの距離が、ピクチャ順序カウント(POC)値に基づいて計算される。
【0146】
予測されるべき動きベクトルに対して、その関連する格納ピクチャと参照ピクチャの両方が異なる場合がある。したがって、(POCに基づく)新たな距離が計算される。そして、動きベクトルは、これらの2つのPOC距離に基づいてスケーリングされる。空間隣接候補の場合、2つの動きベクトルに対する格納ピクチャは同じであるが、参照ピクチャは異なる。HEVCでは、動きベクトルスケーリングは、空間隣接候補および時間隣接候補に対してTMVPとAMVPの両方に適用される。
【0147】
人工動きベクトル候補生成:動きベクトル候補リストが完全でない場合、人工動きベクトル候補が生成され、すべての候補をリストが有するまでリストの末尾に挿入される。
【0148】
マージモードでは、2つのタイプの人工MV候補、すなわち、Bスライスに対してのみ導出される複合候補、および第1のタイプが十分な人工候補を提供しない場合にAMVPのためにのみ使用されるゼロ候補がある。すでに候補リストの中にあり必要な動き情報を有する候補の各ペアに対して、リスト0の中のピクチャを参照する第1の候補の動きベクトルとリスト1の中のピクチャを参照する第2の候補の動きベクトルとの組合せによって、双方向複合動きベクトル候補が導出される。
【0149】
候補挿入のためのプルーニング(pruning)プロセス:異なるブロックからの候補がたまたま同じである場合があり、そのことはマージ/AMVP候補リストの効率を下げる。この問題を解決するためにプルーニングプロセスが適用される。プルーニングプロセスは、同一の候補を挿入することをいくらかの程度で回避するために、現在の候補リストの中の他方に対して一方の候補を比較する。複雑度を低減するために、可能な各候補をすべての他の既存の候補と比較するのではなく、限定された回数だけのプルーニングプロセスが適用される。
【0150】
以下のことはテンプレートマッチング予測を説明する。テンプレートマッチング(TM)予測は、フレームレートアップコンバージョン(FRUC)技法に基づく特別なマージモードである。このモードを用いると、ブロックの動き情報はシグナリングされないが、デコーダ側において(たとえば、ビデオデコーダ300によって)導出される。TM予測は、AMVPモードと通常のマージモードの両方に適用される。AMVPモードでは、現在ブロックテンプレートと参照ブロックテンプレートとの間の最小差に達する候補を拾い上げるために、テンプレートマッチングに基づいてMVP候補選択が決定される。通常のマージモードでは、TMの使用を示すためにTMモードフラグがシグナリングされ、次いで、MV改善のためにマージインデックスによって示されるマージ候補にTMが適用される。
【0151】
図7に示すように、テンプレートマッチングが使用されて、現在フレーム700の中のテンプレート(現在CUの上および/または左の隣接ブロック)と参照フレーム702の中のブロック(テンプレートと同じサイズ)との間の最も近い整合を見つけることによって現在CUの動き情報を導出する。初期整合誤差に基づいて選択されたAMVP候補を用いて、AMVP候補のMVPがテンプレートマッチングによって改善される。シグナリングされたマージインデックスによって示されるマージ候補を用いて、L0およびL1に対応するマージ候補のマージされたMVが、テンプレートマッチングによって独立して改善され、次いで、さほど正確でないMVが、より良好なMVを優先として用いてさらにもう一度改善される。
【0152】
コスト関数に対して、動きベクトルが分数サンプル位置を指し示すとき、動き補償された補間が利用されてよい。複雑度を低減するために、両方のテンプレートマッチングのために通常の8タップDCT-IF補間の代わりに双線形補間が使用されて、参照ピクチャ上のテンプレートを生成する。テンプレートマッチングのマッチングコストCは、次のように計算される。
【0153】
【数1】
【0154】
上の式において、wは、経験的に4に設定される重み付け係数であり、MVおよびMVsは、それぞれ、現在テストしているMV、および初期MV(すなわち、AMVPモードにおけるMVP候補、またはマージモードにおけるマージされた動き)を示す。テンプレートマッチングのマッチングコストとして、SAD(絶対差分和)が使用される。
【0155】
TMが使用されるとき、動きはルーマサンプルのみを使用することによって改善される。導出された動きは、MC(動き補償)インター予測のためにルーマとクロマの両方のために使用され得る。MVが決定された後、ルーマに対して8タップ補間フィルタかつクロマに対して4タップ補間フィルタを使用して、最終MCが実行される。
【0156】
探索方法に対して、MV改善は、テンプレートマッチングコストの基準を用いたパターンベースのMV探索である。MV改善のために、2つの探索パターン、すなわち、ダイアモンド探索およびクロス探索がサポートされる。MVは、ダイヤモンドパターンを用いて1/4のルーマサンプルMVD確度で直接探索され、クロスパターンを用いて1/4のルーマサンプルMVD確度が後続し、次いで、クロスパターンを用いて1/8のルーマサンプルMVD改善がこれに後続する。MV改善の探索範囲は、初期MVの周囲の(-8,+8)ルーマサンプルに等しく設定される。
【0157】
以下のことは双方向マッチング予測を説明する。双方向マッチング(双方向マージとも呼ばれる)(BM)予測は、フレームレートアップコンバージョン(FRUC)技法に基づく別のマージモードである。ブロックがBMモードを適用すべきと決定されると、構成されたマージリストの中のマージ候補を選択するために、シグナリングされたマージ候補インデックスを使用することによって、2つの初期動きベクトルMV0およびMV1が導出される。双方向マッチング探索は、MV0およびMV1の周囲にあってよい。最小双方向マッチングコストに基づいて、最終のMV0'およびMV1'が導出される。
【0158】
2つの参照ブロックを指し示す動きベクトル差分MVD0 800(MV0' - MV0によって示される)およびMVD1 802(MV1' - MV1によって示される)は、現在ピクチャと2つの参照ピクチャとの間の時間距離(TD)、たとえば、TD0およびTD1に比例してよい。図8は、MVD0およびMVD1の一例を示し、TD1はTD0の4倍である。
【0159】
しかしながら、時間距離TD0およびTD1に関係なくMVD0およびMVD1が鏡のように反射する随意の設計がある。図9は、鏡のように反射するMVD0 900およびMVD1 902の一例を示し、TD1はTD0の4倍である。
【0160】
双方向マッチングは、最終のMV0'およびMV1'を導出するために初期MV0およびMV1の周囲の局所的な探索を実行する。局所的な探索は、探索範囲[-8,8]を通じたループに3×3の正方形探索パターンを適用する。各探索反復において、探索パターンの中の8個の周囲MVの双方向マッチングコストが計算され、中心MVの双方向マッチングコストと比較される。最小双方向マッチングコストを有するMVが、次の探索反復における新たな中心MVになる。局所的な探索は、現在の中心MVが3×3の正方形探索パターン内で最小コストを有するかまたは局所的な探索が既定の最大探索反復に達すると終了する。図10は、探索範囲[-8,8]の中の3×3の正方形探索パターン1000の一例を示す。
【0161】
以下のことはデコーダ側動きベクトル改善を説明する。マージモードのMVの確度を高めるために、VVCにおいてデコーダ側動きベクトル改善(DMVR)が適用される。双予測動作では、改善されるMVは、参照ピクチャリストL0および参照ピクチャリストL1の中の初期MVの周囲で探索される。DMVR方法は、参照ピクチャリストL0およびリストL1の中の2つの候補ブロックの間のひずみを計算する。図11に示すように、初期MVの周囲の各MV候補に基づいて、ブロック1102と1100との間のSADが計算される。最小のSADを有するMV候補が、改善されたMVになり、双予測された信号を生成するために使用される。
【0162】
DMVRプロセスによって導出される改善されたMVは、インター予測サンプルを生成するために使用され、将来のピクチャコーディングのための時間動きベクトル予測においても同じく使用される。元のMVは、デブロッキングプロセスの中で使用されるが、将来のCUコーディングのための空間動きベクトル予測においても同じく使用される。
【0163】
DMVRは、16×16ルーマサンプルという既定の最大処理ユニットを用いたサブブロックベースのマージモードである。CUの幅および/または高さが16ルーマサンプルよりも大きいとき、CUは、16ルーマサンプルに等しい幅および/または高さを有するサブブロックにさらに分割されてよい。
【0164】
以下のことは探索方式を説明する。DVMRでは、初期MVを取り囲んでいる探索ポイント、およびMVオフセットは、MV差分ミラーリング規則に準拠し得る。たとえば、候補MVペア(MV0,MV1)によって示される、DMVRによってチェックされるいかなるポイントも、以下の2つの式に準拠し得る。
MV0' = MV0 + MV_offset
MV1' = MV1 - MV_offset
【0165】
上の式において、MV_offsetは、参照ピクチャのうちの1つの中の初期MVと改善されるMVとの間の改善オフセットを表す。改善探索範囲は、初期MVからの2つの整数ルーマサンプルである。探索は、整数サンプルオフセット探索ステージ、および分数サンプル改善ステージを含む。
【0166】
整数サンプルオフセット探索のために25ポイントの全探索が適用される。初期MVペアのSADが最初に計算される。初期MVペアのSADがしきい値よりも小さい場合、DMVRの整数サンプルステージが終了する。そうでない場合、残りの24ポイントのSADが計算されラスタ走査順序でチェックされる。SADが最も小さいポイントが、整数サンプルオフセット探索ステージの出力として選択される。DMVR改善の不確実性の不利益を低減するために、DMVRプロセス中の元のMVが選好されてよい。初期MV候補によって参照される参照ブロックの間のSADは、SAD値の1/4だけ小さくなる。
【0167】
整数サンプル探索に分数サンプル改善が後続する。計算複雑度を節約するために、SAD比較を伴う追加の探索ではなくパラメトリック誤差曲面方程式を使用することによって、分数サンプル改善が導出される。分数サンプル改善は、整数サンプル探索ステージの出力に基づいて条件付きで呼び出される。第1の反復探索または第2の反復探索のいずれかの中で中心が最小SADを有して整数サンプル探索ステージが終了すると、分数サンプル改善がさらに適用される。
【0168】
パラメトリック誤差曲面ベースのサブピクセルオフセット推定では、中心位置コスト、および中心からの隣接する4個の位置におけるコストが、以下の形式の2D放物線誤差曲面方程式を当てはめるために使用される。
E(x,y) = A(x - xmin)2 + B(y - ymin)2 + C
【0169】
上の式において、(xmin,ymin)はコストが最小の分数位置に相当し、Cは最小コスト値に相当する。5つの探索ポイントのコスト値を使用することによって上の式を解くことによって、(xmin,ymin)が、
xmin = (E(-1,0) - E(1,0))/(2(E(-1,0) + E(1,0) - 2E(0,0)))
ymin = (E(0,-1) - E(0,1))/(2((E(0,-1) + E(0,1) - 2E(0,0)))
として算出される。
【0170】
すべてのコスト値が正であり最小値がE(0,0)であるので、xminおよびyminの値は、-8と8との間となるように自動的に制約される。これは、VVCにおける1/16ペルのMV確度を有する1/2ペルのオフセットに対応する。算出された分数(xmin,ymin)が整数距離改善MVに加算されて、サブピクセル確度の改善デルタMVを得る。
【0171】
以下のことは双線形補間およびサンプルパディングを説明する。VVCでは、MVの分解能は1/16ルーマサンプルである。分数位置におけるサンプルは、8タップ補間フィルタを使用して補間される。DMVRでは、探索ポイントは、整数サンプルオフセットを有する初期分数ペルMVを取り囲んでおり、したがって、それらの分数位置のサンプルは、DMVR探索プロセスのために補間されてよい。計算複雑度を低減するために、DMVRにおける探索プロセスのための分数サンプルを生成するために双線形補間フィルタが使用される。いくつかの例では、2サンプルの探索範囲を有する双線形フィルタを使用することによって、DVMRは、通常の動き補償プロセスと比較してより多くの参照サンプルにアクセスしない。改善されるMVがDMVR探索プロセスを用いて達成された後、最終予測を生成するために通常の8タップ補間フィルタが適用される。通常のMCプロセスよりも多くの参照サンプルにアクセスしないために、元のMVに基づく補間プロセスのために必要とされないが改善されたMVに基づく補間プロセスのために必要とされるサンプルは、それらの利用可能なサンプルからパディングされる。
【0172】
以下のことはDMVRのための例示的な有効化条件を説明する。次の条件がすべて満たされる場合、DMVRが有効化される。
a.双予測MVを用いたCUレベルマージモード。
b.現在ピクチャに対して1つの参照ピクチャが過去にあり別の参照ピクチャが将来にある。
c.両方の参照ピクチャから現在ピクチャまでの距離(たとえば、POC差分)が同じである。
d.CUが64個よりも多くのルーマサンプルを有する。
e.CU高さとCU幅の両方が8ルーマサンプルよりも大きいかまたはそれに等しい。
f.BCW(CUレベルの重みを用いた双予測)重みインデックスが等しい重みを示す。
g.現在ブロックに対してWP(重み付き予測)が有効化されていない。
h.現在ブロックに対してCIIP(複合インターおよびイントラ予測)モードが使用されない。
【0173】
以下のことは双方向オプティカルフローを説明する。双方向オプティカルフロー(BDOF)は、4×4のサブブロックレベルにおけるCUの中のルーマサンプルの双予測信号を改善するために使用される。その名称が示すように、BDOFモードは、物体の動きが滑らかであることを想定するオプティカルフロー概念に基づく。4×4の各サブブロックに対して、L0予測サンプルとL1予測サンプルとの間の差分を最小化することによって動き改善(vx,vy)が計算される。動き改善は、次いで、4×4のサブブロックの中で双予測されるサンプル値を調整するために使用される。
【0174】
たとえば、BDOFの場合、ビデオエンコーダ200およびビデオデコーダは、ブロックに対してBDOFが有効化されることを決定し、ブロックに対してBDOFが有効化されるとき、ブロックを複数のサブブロックに分割してよい。いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、ブロックに対する第1の動きベクトルから第1の参照ブロックを、かつブロックに対する第2の動きベクトルから第2の参照ブロックを決定してよい。ビデオエンコーダ200およびビデオデコーダ300は、予測ブロックを生成するために、第1の参照ブロックの中のサンプルと第2の参照ブロックの中のサンプルとをブレンド(たとえば、重み付き平均)してよい。ビデオエンコーダ200およびビデオデコーダ300は、サブブロックのサンプルを符号化または復号するために使用される予測サンプルを生成するために、動き改善を決定してよく予測ブロックの中のサンプルを調整してよい。いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、サブブロックの中の各サンプルにとって同じである動き改善(すなわち、サブブロックBDOFと呼ばれる、サブブロックレベルの動き改善)を決定してよい。いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、サブブロックにおける動き改善または各サンプル(すなわち、ピクセル単位BDOFと呼ばれる、サンプルレベルの動き改善)を決定してよい。
【0175】
サブブロックBDOFに適用可能であり得るBDOFプロセスの中で、以下のステップが適用される。ピクセル単位BDOFのためのステップが、以下でさらにより詳細に説明される。
【0176】
最初に、2つの予測信号の水平勾配および垂直勾配
【0177】
【数2】
【0178】
および
【0179】
【数3】
【0180】
が、2つの隣接サンプルの間の差分を直接計算すること、すなわち、
【0181】
【数4】
【0182】
によって算出される。
【0183】
上の例において、I(k)(i,j)は、リストk(k=0,1)の中の予測信号の座標(i,j)におけるサンプル値であり、shift1は、shift1が6に等しくなるように設定されるようにルーマビット深度bitDepthに基づいて計算される。すなわち、I(0)は第1の参照ブロックのサンプルを指し、I(1)は第2の参照ブロックのサンプルを指し、ここで、第1の参照ブロックおよび第2の参照ブロックは、そのサンプルがBDOF技法に従って調整中である予測ブロックを生成するために使用された。
【0184】
次いで、勾配の自己相関および相互相関S1、S2、S3、S5、およびS6が、
S1 = Σ(i,j)∈Ωx(i,j)|、S3 = Σ(i,j)∈Ωθ(i,j)・(-sign(ψx(i,j))
S2 = Σ(i,j)∈Ωψx(i,j)・sign(ψy(i,j))
S5 = Σ(i,j)∈Ωy(i,j)|、S6 = Σ(i,j)∈Ωθ(i,j)・(-sign(ψy(i,j)) (1-6-2)
として計算され、ここで、
【0185】
【数5】
【0186】
であり、ただし、Ωは4×4のサブブロックの周囲の6×6のウィンドウであり、shift2の値は4に等しくなるように設定され、shift3の値は1に等しくなるように設定される。
【0187】
動き改善(vx,vy)が、次いで、以下のことを使用して相互相関項および自己相関項を使用して導出される。この例では、動き改善はサブブロックに対するものである。ピクセル単位動き改善計算が以下でより詳細に説明される。
【0188】
【数6】
【0189】
ただし、th'BIO = 1 << 4である。
【0190】
【数7】
【0191】
は、床関数である。
【0192】
動き改善および勾配に基づいて、4×4のサブブロックの中の各サンプルに対して以下の調整が計算される。
【0193】
【数8】
【0194】
最後に、次のように双予測サンプルを調整することによってCUのBDOFサンプルが計算される。
predBDOF(x,y) = (I(0)(x,y) + I(1)(x,y) + b(x,y) + οoffset) >> shift5 (1-6-6)
ただし、shift5はMax(3,15 - BitDepth)に等しく設定され、変数οoffsetは(1 << (shift5 - 1))に等しく設定される。
【0195】
上の例において、I(0)は第1の参照ブロックを指し、I(1)は第2の参照ブロックを指し、b(x,y)は、サブブロックに対する動き改善(vx,vy)に基づいて決定される調整値である。いくつかの例では、I(0)(x,y) + I(1)(x,y)は予測ブロックと見なされてよく、したがって、b(x,y)は予測ブロックを調整するものと見なされてよい。式(1-6-6)に示すように、予測サンプル(predBDOF(x,y))を生成するために、ooffsetの加算、およびshift5だけの右シフト演算があってよい。
【0196】
上記のことは、サブブロックの中のすべてのサンプルにとって同じである動き改善(vx,vy)が同じであることを、ビデオエンコーダ200およびビデオデコーダ300が決定する、サブブロックBDOFに対する一例を説明する。調整値b(x,y)は、勾配のためにサブブロックの中の各サンプルにとって異なる場合があるが、動き改善は同じであってよい。
【0197】
以下でさらにより詳細に説明するように、ピクセル単位BDOFでは、ビデオエンコーダ200およびビデオデコーダ300は、ピクセル単位動き改善(vx',vy')を決定してよい。すなわち、サブブロックBDOFにおけるようにサブブロックに対して1つの動き改善があるのではなく、ピクセル単位BDOFでは、各サンプル(たとえば、ピクセル)に対して、異なる動き改善があってよい。ビデオエンコーダ200およびビデオデコーダ300は、サブブロックにとって同じである動き改善を使用するのではなく、各サンプルのための対応するピクセル単位動き改善に基づいて、そのサンプルに対して調整値b'(x,y)を決定してよい。
【0198】
いくつかの例では、式1-6-6からの値は、BDOFプロセスにおける乗数が15ビットを超えずBDOFプロセスにおける中間パラメータの最大ビット幅が32ビット内に保たれるように選択される。
【0199】
勾配値を導出するために、現在のCU境界の外側の、リストk(k=0,1)の中のいくつかの予測サンプルI(k)(i,j)が、ビデオエンコーダ200およびビデオデコーダ300によって生成される。図12に示すように、BDOFは、CU1200の境界の周囲の、1つの拡張された行/列を使用する。境界の外側の予測サンプルを生成する計算量を制御するために、ビデオエンコーダ200およびビデオデコーダ300は、補間を用いずに直接(座標に対してfloor()演算を使用して)近くの整数位置における参照サンプルを取ることによって、拡張されたエリア(白色の位置)の中の予測サンプルを生成してよく、通常の8タップ動き補償補間フィルタが、CU内(灰色の位置)の予測サンプルを生成するために使用される。これらの拡張されたサンプル値は、勾配計算においてのみ使用されてよい。BDOFプロセスにおける残りのステップに対して、CU境界の外側の任意のサンプルおよび勾配値が必要とされる場合、サンプルおよび勾配値は、それらの最も近くのネイバーからパディング(すなわち、反復)される。
【0200】
BDOFは、4×4サブブロックレベルにおけるCUの双予測信号(たとえば、第1の参照ブロックと第2の参照ブロックとの和)を改善するために使用される。次の条件のすべてが満たされる場合、BDOFがCUに適用される。
a.「真の」双予測モードを使用してCUがコーディングされ、すなわち、2つの参照ピクチャのうちの一方が表示順序で現在ピクチャの前にあり、他方が表示順序で現在ピクチャの後にある。
b.CUがアフィンモードまたはATMVPマージモードを使用してコーディングされていない。
c.CUが64個よりも多くのルーマサンプルを有する。
d.CU高さとCU幅の両方が8ルーマサンプルよりも大きいかまたはそれに等しい。
e.BCW重みインデックスが等しい重みを示す。
f.現在CUに対してWPが有効化されていない。
g.現在CUに対してCIIPモードが使用されない。
【0201】
BDOFを伴ういくつかの問題があり得る。上記で説明したように、現在のバージョンのVVCでは、BDOF方法は、4×4サブブロックレベルにおけるコーディングブロックの中のルーマサンプルの双予測信号を改善するために使用される。動き改善(vx,vy)は、6×6のルーマサンプル領域の中でL0予測サンプルとL1予測サンプルとの間の差分を最小化することによって導出される。L0予測サンプルは、第1の参照ブロックのサンプルを指し、L1予測サンプルは、第2の参照ブロックのサンプルを指す。動き改善(vx,vy)が、次いで、4×4のサブブロックの各予測サンプルを調整するために使用される。
【0202】
しかしながら、4×4のサブブロックの中のルーマサンプルは、4×4のサブブロックの中の他のルーマサンプルと比較して異なる動き改善特性を有することがある。ピクセルレベルにおいて動き改善(v'x,v'y)を計算することは、各ピクセルに対する動き改善の確度を改善することができ、したがって、サブブロックまたはブロック予測品質を改善することができる。
【0203】
しかしながら、BDOFはデコーダ側プロセスであり、BDOFの複雑度はまた、ビデオコーディング方法を設計するときに検討されるべき重要な側面である。ピクセルレベルにおいて動き改善(v'x,v'y)が計算されるとき、BDOFの複雑度は、4×4サブブロックレベルにおける現在のBDOFと比較して16倍であり得る。言い換えれば、現在の4×4サブブロックBDOFは、最良の予測品質を達成しない。ピクセル単位BDOFはより良好な予測品質を有するが、ビデオコーディングにとって複雑度が問題である。
【0204】
VVCドラフト10では、BDOFがデコーダ側動きベクトル改善(DMVR)に先行するとき、BDOFプロセスは、DMVR探索プロセスにおける最小SADに基づいてバイパスされ得る。DMVRプロセスは、16×16サブブロックレベルにおけるものである。このBDOFバイパス方式は、複雑度を低減することができる。
【0205】
しかしながら、16×16のサブブロック内のサブエリアの予測信号は、BDOFによって改善される必要があり得る。VVCドラフト10方式のBDOFバイパスは、16×16のサブブロック内のサブエリアにおいてBDOFを適用できず、その間に他のサブエリアにおいてBDOFをバイパスする。VVCドラフト10では、(DMVR予測されない)双予測されるコーディングブロックに対してBDOFが適用されるとき、バイパスBDOF方式がない。
【0206】
以下のことは、上記の問題に対処し得る例示的な技法を説明する。しかしながら、本技法は、上記の問題に対処することへの限定またはそのことのために必要とされるものと見なされるべきでない。以下の技法は、事実上、別個にまたは任意の組合せで使用され得る。簡単のために、以下の技法は様々な態様として説明されるが、そのような態様は、別個であることを必要とされるものと見なされるべきでなく、事実上、様々な態様が組み合わせられ得る。別段に規定されていない限り、例示的な態様がビデオエンコーダ200および/またはビデオデコーダ300によって実行されてよい。
【0207】
第1の態様は、サブブロックBDOFをバイパスすることに関する。この第1の態様では、W×Hのコーディングブロックが双方向オプティカルフロー(BDOF)を適用すべきと決定されると、ビデオエンコーダ200および/またはビデオデコーダ300は、コーディングブロックのサブエリアに対してBDOFプロセスをバイパスしてよい。第1の態様に対するBDOFプロセスは次の通りであり得る。
a.BDOFプロセスは入力ブロック(S1と指名する)とともに開始し、S1は寸法W_1×H_1を有し、S1の寸法はコーディングブロックの寸法に等しいかまたはそれよりも小さい。先に行われたプロセスがブロックベースであるとき、S1の寸法はコーディングブロックに等しい。先に行われたプロセスがサブブロックベース(ハードウェア制約に起因するかまたは以前の処理ステージからのサブブロック区分)であるとき、S1の寸法はコーディングブロックよりも小さい。
b.入力ブロックS1はN個のサブブロック(S2と指名する)に分割され、S2は寸法W_2×H_2を有し、S2の寸法はS1の寸法に等しいかまたはそれよりも小さい。条件Tによって決定される各S2に対して、S2はBDOFを適用すべきか否かが決定される。いくつかの例では、条件Tとは、参照ピクチャ0および参照ピクチャ1の中の2つの予測信号の間のSADがしきい値よりも小さいか否かをチェックすることである。このステップにおけるサブブロックは、ユニット内のすべてのサンプルにBDOFを適用すべきかどうかの決定のための基本ユニットを規定する。
c.S2にBDOFを適用すべきと決定されると、S2はM個のサブブロック(S3と指名する)に分割され、S3は寸法W_3×H_3を有し、S3の寸法はS2の寸法に等しいかまたはそれよりも小さい。各S3に対して、BDOFプロセスが適用されて改善された動きベクトル(v'x,v'y)を導出し、(動き補償、または初期予測信号にオフセットを加算することのいずれかを通じて)導出された動きベクトルを使用してS3の予測信号を導出する。このステップにおけるサブブロックは、改善された動きベクトルの粒度に対するユニットを規定し、ユニット内のすべてのサンプルは、同じ改善された動きを共有する。
【0208】
態様1のBDOFプロセスでは、ブロックS1、S2、およびS3が規定される。S3の寸法はS2に等しいかまたはそれよりも小さくてよく、S2の寸法はS1に等しいかまたはそれよりも小さくてよい。言い換えれば、W_3はW_2に等しいかまたはそれよりも小さく、H_3はH_2に等しいかまたはそれよりも小さく、W_2はW_1に等しいかまたはそれよりも小さく、H_2はH_1に等しいかまたはそれよりも小さい。サイズは固定されてよく、ピクチャ解像度に適合されてよく、またはビットストリームの中でシグナリングされてもよい。
【0209】
1つの事例は、W_3が1に等しくH_3が1に等しいことであり、ここで、S3はピクセルベースである。この事例はピクセル単位BDOFプロセスであってよい。
【0210】
いくつかの例では、先に行われたサブブロックベースのプロセスがコーディングブロックに適用されるか否かにかかわらず、S1はコーディングブロックである。
【0211】
第2の態様は、サブブロックBDOFバイパス方式を用いたピクセル単位BDOFに関する。第1の態様におけるように、W×Hのコーディングブロック(S1)が双方向オプティカルフロー(BDOF)を適用すべきと決定されると、コーディングブロックはN個のサブブロック(S2)に分割される。各サブブロックに対して、サブブロックにBDOFを適用すべきか否かが、参照ピクチャ0および参照ピクチャ1の中の2つの予測信号の間のSADがしきい値よりも小さいか否かをチェックすることによって、さらに決定される。サブブロックにBDOFを適用すべきと決定される場合、改善された動きベクトル(v'x,v'y)がサブブロック(S2)内の各ピクセル(S3)に対して計算される。改善された動きベクトル(v'x,v'y)は、サブブロック(S2)内のそのピクセル(S3)に対する予測信号を調整するために使用される。サブブロックバイパスプロセスを伴うピクセル単位BDOFの一例が図13に示される。
【0212】
たとえば、図13において、ビデオエンコーダ200およびビデオデコーダ300は、ビデオデータのブロックに対してBDOFが有効化されることを決定してよく、ビデオエンコーダ200およびビデオデコーダ300は、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割してよい。図13に示すように、サブブロックの個数およびN個のサブブロックインデックス<i = 0>を導出することは(1300)、ビデオエンコーダ200およびビデオデコーダ300がブロックをN個のサブブロックに分割し、ここで、各サブブロックがそれぞれのインデックスによって識別され、第1のインデックスが0であることを指す。したがって、インデックスは0からN-1までに及ぶ。
【0213】
ビデオエンコーダ200およびビデオデコーダ300は、i < Nによって表されるように、ブロックの中のすべてのサブブロックのための予測サンプルが決定されているかどうかを決定してよい(1302)。すべてのサブブロックのための予測サンプルが決定されている場合(1302のNO)、ビデオエンコーダ200およびビデオデコーダ300は、サブブロックのための予測サンプルを決定するプロセスを終えてよい。しかしながら、すべてのサブブロックのための予測サンプルが決定されていない場合(1302のYES)、ビデオエンコーダ200およびビデオデコーダ300は、ブロックが分割された先の複数のサブブロックのうちの現在のサブブロックの予測サンプルを決定するプロセスを継続してよい。
【0214】
現在のサブブロックに対して、ビデオエンコーダ200およびビデオデコーダ300はひずみ値を決定してよい(1304)。ひずみ値に対する決定がサブブロックごとに行われてよいので、ビデオエンコーダ200およびビデオデコーダ300は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するものと見なされてよい(たとえば、第1のサブブロックに対する第1のひずみ値、第2のサブブロックに対する第2のひずみ値、以下同様)。
【0215】
現在のサブブロックに対するひずみ値を決定するための1つの例示的な方法は、第1の参照ブロック(ref0)と第2の参照ブロック(ref1)との間の絶対差分和(SAD)を決定することによるものである。しかしながら、ひずみ値を決定するための他の方法があってよい。たとえば、以下でさらにより詳細に説明するように、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、ビデオエンコーダ200およびビデオデコーダ300がBDOFを実行することになるときなどの、得られた値が後で再使用され得るような方法でひずみ値を決定してよい。
【0216】
図13に示すように、ビデオエンコーダ200およびビデオデコーダ300は、ひずみ値をしきい値と比較してよい(1306)。比較に基づいて、ビデオエンコーダ200およびビデオデコーダ300は2つのオプションを有してよい。第1のオプションは、ピクセル単位BDOFを実行することであってよく、第2のオプションは、BDOFをバイパスすることであってよい。ビデオエンコーダ200およびビデオデコーダ300にはサブブロックBDOFなどの他のオプションがない場合がある。したがって、ビデオエンコーダ200およびビデオデコーダ300は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて(たとえば、固定されたしきい値またはそれぞれのしきい値との、それぞれのひずみ値の比較に基づいて)決定するものと見なされてよい。
【0217】
たとえば、現在のサブブロックに対するひずみ値がしきい値よりも大きい場合(1306のNO)、ビデオエンコーダ200およびビデオデコーダ300は、ピクセル単位BDOFを実行してよい(1308)。現在のサブブロックに対するひずみ値がしきい値よりも小さい場合(1306のYES)、ビデオエンコーダ200およびビデオデコーダ300は、(たとえば、サブブロックに対してBDOFをバイパスすることによって)サブブロックの中の予測信号を導出してよい(1310)。
【0218】
1つまたは複数の例では、ビデオエンコーダ200およびビデオデコーダ300は、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定してよい。たとえば、ビデオエンコーダ200およびビデオデコーダ300が現在のサブブロックに対してBDOFを実行することになる場合、ビデオエンコーダ200およびビデオデコーダ300はピクセル単位BDOF技法を使用して予測サンプルを決定してよいが、ビデオエンコーダ200およびビデオデコーダ300が現在のサブブロックに対してBDOFをバイパスすることになる場合、ビデオエンコーダ200およびビデオデコーダ300は、BDOF技法を使用せずに予測サンプルを決定してよい。
【0219】
図13の上の例は、現在のサブブロックに対してピクセル単位BDOFが実行されるのかそれともBDOFがバイパスされるのかの決定がどのように行われるのかを説明した。ビデオエンコーダ200およびビデオデコーダ300は、上記の例示的な技法をサブブロックごとに実行してよい。
【0220】
たとえば、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するために、1つまたは複数のサブブロックのうちの第1のサブブロックに対して、ビデオエンコーダ200およびビデオデコーダ300は、それぞれのひずみ値の第1のひずみ値を決定してよく、1つまたは複数のサブブロックのうちの第2のサブブロックに対して、ビデオエンコーダ200およびビデオデコーダ300は、それぞれのひずみ値の第2のひずみ値を決定してよい。
【0221】
複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するために、複数のサブブロックのうちの第1のサブブロックに対して、ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックに対してBDOFが有効化されることを第1のひずみ値に基づいて(たとえば、第1のひずみ値がしきい値よりも大きいことに基づいて)決定してよい。この例では、第1のサブブロックに対してBDOFが有効化されるという決定に基づいて、ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックのための予測サンプルの第1のセットを改善するためのピクセル単位動き改善を決定してよい(たとえば、ピクセル単位BDOFを実行してよい)。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックの第1のサンプルに対して、第1の予測サンプルを改善するための第1の動き改善を導出してよく、第1のサブブロックの第2のサンプルに対して、第2の予測サンプルを改善するための第2の動き改善を導出してよく、以下同様である。
【0222】
しかしながら、複数のサブブロックのうちの第2のサブブロックに対して、ビデオエンコーダ200およびビデオデコーダ300は、BDOFがバイパスされることを第2のひずみ値に基づいて(たとえば、第2のひずみ値がしきい値よりも小さいことに基づいて)決定することがある。この例では、第2のブロックに対してBDOFがバイパスされるという決定に基づいて、ビデオエンコーダ200およびビデオデコーダ300は、第2のサブブロックのための予測サンプルの第2のセットを改善するためのピクセル単位動き改善を決定することをバイパスしてよい(たとえば、BDOFをバイパスしてよい)。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックの第1のサンプルに対して、第1の予測サンプルを改善するための第1の動き改善の導出をバイパスしてよく、第1のサブブロックの第2のサンプルに対して、第2の予測サンプルを改善するための第2の動き改善の導出をバイパスしてよく、以下同様である。
【0223】
ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するために、ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックに対して、第1のサブブロックの予測サンプルの改善された第1のセットを第1のサブブロックのためのピクセル単位動き改善に基づいて決定してよい。第2のサブブロックに対して、ビデオエンコーダ200およびビデオデコーダ300は、予測サンプルの第2のセットを改善するためのピクセル単位動き改善に基づいて予測サンプルの第2のセットを改善することなく、予測サンプルの第2のセットを決定してよい。
【0224】
第2の態様内で、以下のことはサブブロックBDOFをバイパスすることを説明する。双方向オプティカルフロー(BDOF)を適用すべきと決定されるW×Hのコーディングブロックが与えられると、サブブロックの個数Nは次のように決定される。
a. numSbX = (W > thW) ? (W / thW) : 1
b. numSbY = (H > thH) ? (H / thH) : 1
c. N = numSbX * numSbY
【0225】
上記では、thWは最大サブブロック幅を表し、thHは最大サブブロック高さを表す。thWおよびthHの値は事前決定された整数値である(たとえば、thW = thH = 8)。
【0226】
各サブブロックに対して、ビデオエンコーダ200および/またはビデオデコーダ300は、それぞれ、参照ピクチャ0および参照ピクチャ1から予測信号predSig0および予測信号predSig1を導出してよい。predSig0およびpredSig1の幅(sbWidth)および高さ(sbHeight)は、次のように決定される。
a. sbWidth = (W > thW) ? thW : W
b. sbHeight = (H > thH) ? thH : H
【0227】
サブブロックにおいてBDOFをバイパスすべきか否かは、predSig0とpredSig1との間のSADをチェックすることによって決定される。SADは次のように導出される。
【0228】
【数9】
【0229】
上の式において、Ω''はsbWidth×sbHeightのサブブロックであり、I(k)(i,j)は、参照ピクチャk(k=0,1)の中の予測信号の座標(i,j)におけるサンプル値である。
【0230】
sbSADがしきい値sbDistThよりも小さい場合、ビデオエンコーダ200および/またはビデオデコーダ300は、サブブロックにおいてBDOFをバイパスすべきと決定してよく、そうでない場合(sbSADがsbDistThに等しいかまたはそれよりも大きい場合)、ビデオエンコーダ200および/またはビデオデコーダ300は、サブブロックにBDOFを適用すべきと決定してよい。しきい値sbDistThは次のように導出される。
sbDistTh = (sbWidth・sbHeight・s) << n (3-1-1-2)
【0231】
上の式において、nおよびsは事前決定された値である。たとえば、nは、n = InternalBitDepth - bitDepth + 1として導出され得る。上の式において、sはスケール係数を表し、たとえば、s = 1である。現在のバージョンのVVCでは、InternalBitDepthはbitDepth10において14に等しく、したがって、nは5に等しい。スケールsは、1、2、3、事前定義された他の値であってよく、またはビットストリームの中でシグナリングされてもよい。
【0232】
上記のことが、しきい値を決定する1つの例示的な方法およびひずみ値を決定する1つの例示的な方法を説明することを、理解されたい。しかしながら、例示的な技法はそのように限定されない。以下でより詳細に説明するように、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、ピクセル単位BDOFが実行されることになるという決定がなされる場合、ひずみ値を決定するために使用された計算がピクセル単位BDOFを実行するために再使用され得るような方法でひずみ値を決定してよい。
【0233】
第2の態様内で、以下のことはピクセル単位BDOFを説明する。ビデオエンコーダ200および/またはビデオデコーダ300が、sbWidth×sbHeightのサブブロックにBDOFを適用すべきと決定した場合、サブブロックは(sbWidth + 4)×(sbHeight + 4)の領域に拡張される。サブブロック内の各ピクセルに対して、ビデオエンコーダ200および/またはビデオデコーダ300は、5×5の周囲領域の勾配に基づいて、改善された動きベクトルとも呼ばれる動き改善(v'x,v'y)を導出してよい。図14は、8×8のサブブロックのピクセル単位BDOFの一例を示す。したがって、ピクセル単位BDOFでは、ビデオエンコーダ200およびビデオデコーダ300はピクセル単位動き改善を決定してよい。サブブロックBDOFでは、動き改善はサブブロックに対するものであり、サンプルごとには(たとえば、ピクセルごとには)決定されない。
【0234】
上記では、sbWidth×sbHeightのサブブロックが与えられると、ピクセル単位BDOFプロセスにおいて以下のステップが適用される。
- 2つの予測信号の水平勾配および垂直勾配
【0235】
【数10】
【0236】
および
【0237】
【数11】
【0238】
が、上記で説明した双方向オプティカルフローにおけるように2つの隣接サンプルの間の差分を直接計算することによって算出され、(i,j)は、参照ピクチャ0および参照ピクチャ1の中の予測信号の(sbWidth + 4)×(sbHeight + 4)の領域の中の座標付き位置である。
- サブブロック内の各ピクセルに対して、以下のステップが適用される。
・勾配の自己相関および相互相関S1、S2、S3、S5、およびS6が、上記で説明した双方向オプティカルフローにおけるように計算され、Ω'は、ピクセルの周囲の5×5のウィンドウである。
・動き改善(v'x,v'y)が、次いで、相互相関項および自己相関項を使用して導出される。
・動き改善および勾配に基づいて、ピクセルの予測信号を導出するために以下の調整が計算される。
【0239】
【数12】
【0240】
上の例において、I(0)は第1の参照ブロックを指し、I(1)は第2の参照ブロックを指す。調整値b'(x,y)は、サブブロックの中の各サンプルに対するピクセル単位動き改善(v'x,v'y)に基づいて決定される調整値である。いくつかの例では、I(0)(x,y) + I(1)(x,y)は予測ブロックと見なされてよく、したがって、b'(x,y)は予測ブロックを調整するものと見なされてよい。式(3-1-2-1)に示すように、予測サンプル(predBDOF(x,y))を生成するために、ooffsetの加算、およびshift5だけの右シフト演算があってよい。
【0241】
第3の態様は、代替のサブブロックSAD導出に関する。SADを導出するためのこの例示的な技法は、SAD導出のために決定された値がピクセル単位BDOFを実行するために再使用され得るようなものであってよい。すなわち、ビデオエンコーダ200およびビデオデコーダは、ピクセル単位BDOFを実行すべきか否かを決定するために、最初にサブブロックに対してひずみ値(たとえば、SAD値)を決定してよい。ピクセル単位BDOFが実行されることになることをビデオエンコーダ200およびビデオデコーダ300が決定する場合、ピクセル単位BDOFを実行すべきか否かを決定するためにビデオエンコーダ200およびビデオデコーダ300が実行した計算が、ピクセル単位BDOFを実行するために再使用されてよい。
【0242】
たとえば、サブブロックに対してひずみ値を決定するための1つの方法は、(たとえば、第1の動きベクトルによって識別される)第1の参照ブロックおよび(たとえば、第2の動きベクトルによって識別される)第2の参照ブロックを決定し、第1の参照ブロックのサンプルと第2の参照ブロックのサンプルとの間の差分値を決定して、ひずみ値を決定することである。一例として、上記で説明したように、ひずみ値を決定するための1つの方法は、
【0243】
【数13】
【0244】
を決定することである。
【0245】
上の式において、I(1)(i,j)は、第1の参照ブロックのサンプルを指し、I(0)(i,j)は、第2の参照ブロックのサンプルを指す。上記でさらに説明したように、ピクセル単位動き改善(たとえば、v'x、v'y)を含む、動き改善を決定するために、ビデオエンコーダ200およびビデオデコーダ300は、勾配の自己相関および相互相関であるS1、S2、S3、S5、およびS6を決定してよい。式1-6-3で説明したように、勾配の自己相関および相互相関を決定することの一部は、θに対する中間値を決定することであり、ただし、θ = (I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)である。
【0246】
したがって、サブブロックに対してピクセル単位BDOFが実行されることになる場合、ビデオエンコーダ200およびビデオデコーダ300は、(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)を決定する必要があり得る。1つまたは複数の例では、サブブロックに対してひずみ値を決定することの一部として、ビデオエンコーダ200およびビデオデコーダ300は、(I(1)(i,j)) - (I(0)(i,j))に基づいてひずみ値を決定する代わりに(または、それに加えて)(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)に基づいてサブブロックに対してひずみ値を決定してよい。すなわち、ピクセル単位BDOFが実行されることになるかどうかを決定するためなどの、サブブロックに対してひずみ値を決定するために、ビデオエンコーダ200およびビデオデコーダ300は、sbSADに対する値として(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)を決定してよい。このようにして、ピクセル単位BDOFが実行されることになる場合、ビデオエンコーダ200およびビデオデコーダ300は、(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)に対する値をすでに決定していることになり、そうした値はθの値であり、動き改善を決定するために使用される。
【0247】
したがって、1つまたは複数の例では、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するために、ビデオエンコーダ200およびビデオデコーダ300は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、第1の参照ブロックおよび第2の参照ブロックを決定するように構成され得る。たとえば、I(0)(i,j)が第1の参照ブロックであってよく、I(1)(i,j)が第2の参照ブロックであってよい。
【0248】
ビデオエンコーダ200およびビデオデコーダ300は、第1の参照ブロックのサンプルおよび第2の参照ブロックのサンプルをスケーリングしてよい。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、I(0)(i,j) >> shift2という演算を実行してよい。この例では、shift2の値は、第1の参照ブロックのスケーリングされたサンプルを生成するために、I(0)(i,j)の値をどのくらいだけスケーリングすべきかを規定し得る。同様に、ビデオエンコーダ200およびビデオデコーダ300は、I(1)(i,j) >> shift2という演算を実行してよい。この例では、shift2の値は、第2の参照ブロックのスケーリングされたサンプルを生成するために、I(1)(i,j)の値をどのくらいだけスケーリングすべきかを規定し得る。
【0249】
ビデオエンコーダ200およびビデオデコーダ300は、それぞれのひずみ値を決定するために、第1の参照ブロックのスケーリングされたサンプルと第2の参照ブロックのスケーリングされたサンプルとの間の差分値を決定してよい。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)を決定してよい。ビデオエンコーダ200およびビデオデコーダ300は、(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)の結果に基づいてサブブロックに対してひずみ値(たとえば、sbSAD)を決定してよい。
【0250】
上記で説明したように、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300に対して計算利得があってよく、(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)の値がピクセル単位BDOFに対して再使用され得る。たとえば、符号化中または復号中のブロックが分割された先の複数のサブブロックのうちの1つまたは複数のサブブロックの第1のサブブロックに対してピクセル単位BDOFが実行されることを、ビデオエンコーダ200およびビデオデコーダ300が決定したことを想定する。
【0251】
この例では、ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックの中の各サンプルに対してそれぞれの動き改善を決定してよい。すなわち、ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックの中のすべてのサンプルにとって同じである1つの動き改善(vx,vy)を決定するのではなく、またはそれに加えて、第1のサブブロックの各サンプルに対して動き改善(v'x,v'y)を決定してよい。
【0252】
ビデオエンコーダ200およびビデオデコーダ300は、それぞれの動き改善に基づいて第1のサブブロックのための予測ブロックの中のサンプルから、第1のサブブロックの中の各サンプルに対してそれぞれの改善されたサンプル値を決定するように構成され得る。たとえば、上記で説明したように、ピクセル単位BDOFに対して予測サンプルを決定するための式は、predBDOF(x,y) = (I(0)(x,y) + I(1)(x,y) + b'(x,y) + οoffset) >> shift5であってよい。
【0253】
predBDOFを決定するために、ビデオエンコーダ200およびビデオデコーダ300は、それぞれのピクセル単位動き改善(すなわち、(v'x,v'y))から決定されるピクセル単位調整値であるb'(x,y)を決定してよい。いくつかの例では、予測ブロックは、第1の参照ブロックと第2の参照ブロックとの和(すなわち、I(0)(i,j) + I(1)(i,j))と見なされてよい。predBDOFを決定するための式に示すように、ビデオエンコーダ200およびビデオデコーダ300は、I(0)(i,j) + I(1)(i,j)をb'(x,y)に加算してよい。したがって、predBDOFを決定することの一部として、ビデオエンコーダ200およびビデオデコーダ300は、それぞれの動き改善(たとえば、b'(x,y)を決定するために使用される(v'x,v'y))に基づいて第1のサブブロックに対して、(たとえば、予測ブロックがI(0)(i,j) + I(1)(i,j)に等しい場合)予測ブロックの中のサンプルから、改善されたサンプル値(たとえば、predBDOF)を決定してよい。
【0254】
言い換えれば、ビデオエンコーダ200およびビデオデコーダ300は、1つまたは複数のサブブロックのうちの第1のサブブロックのための第1の参照ブロックの中のサンプル値の第1のセットを決定してよい(たとえば、I(0)(i,j)を決定してよい)。ビデオエンコーダ200およびビデオデコーダ300は、スケーリングされたサンプル値の第1のセットを生成するために、スケール係数を用いてサンプル値の第1のセットをスケーリングしてよい。すなわち、I(0)(i,j) >> shift2を実行するために、ビデオエンコーダ200およびビデオデコーダ300は、「>>」および「shift2」の値によって規定されるスケール係数だけ、サンプルの第1のセットをスケーリングするものと見なされてよい。
【0255】
ビデオエンコーダ200およびビデオデコーダ300は、1つまたは複数のサブブロックのうちの第1のサブブロックのための第2の参照ブロックの中のサンプル値の第2のセットを決定してよい(たとえば、I(1)(i,j)を決定してよい)。ビデオエンコーダ200およびビデオデコーダ300は、スケーリングされたサンプル値の第2のセットを生成するために、スケール係数を用いてサンプル値の第2のセットをスケーリングしてよい。すなわち、I(1)(i,j) >> shift2を実行するために、ビデオエンコーダ200およびビデオデコーダ300は、「>>」および「shift2」の値によって規定されるスケール係数だけ、サンプルの第2のセットをスケーリングするものと見なされてよい。
【0256】
ビデオエンコーダ200およびビデオデコーダ300は、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットに基づいて(たとえば、I(0)(i,j) >> shift2およびI(1)(i,j) >> shift2に基づいて)、第1のサブブロックに対してひずみ値を決定してよい。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)に基づいて第1のサブブロックに対してひずみ値を決定してよい。
【0257】
1つまたは複数の例では、上記で説明したように、第1のサブブロックに対してピクセル単位BDOFが実行されることを想定する。この例では、ビデオエンコーダ200およびビデオデコーダ300は、ピクセル単位BDOFに対するピクセル単位動き改善を決定するために、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットを再使用してよい。たとえば、ビデオエンコーダ200およびビデオデコーダ300は、勾配の自己相関および相互相関を決定するための(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)という計算を、ピクセル単位動き改善(たとえば、(v'x,v'y))を決定するために再使用してよい。上記で説明したように、ビデオエンコーダ200およびビデオデコーダ300は、predBDOF(すなわち、ブロックの第1のサブブロックを符号化または復号するための予測サンプル)を決定するために使用されるb'(x,y)という調整値を決定するために、ピクセル単位動き改善を使用してよい。
【0258】
上記のことは、ビデオエンコーダ200およびビデオデコーダ300が、ピクセル単位BDOFに対するピクセル単位動き改善を決定するために、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットを再使用し得る一例を説明する。しかしながら、技法はそのように限定されない。いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300は、BDOFに対する動き改善を決定するために、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットを再使用してよい。すなわち、例示的な技法は、ピクセル単位BDOFに対するピクセル単位動き改善のために、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットを再使用することに限定されなくてよく、BDOFに対する動き改善のために、より一般に使用され得る(たとえば、ピクセル単位BDOFに対するピクセル単位動き改善に限定されない)。ピクセル単位BDOFに対してだけでなく、BDOFがピクセルごとでなくサブブロック全体に対して動き改善を含む例におけるようなサブブロックベースのBDOFに対しても、複雑度の低減があり得る。
【0259】
したがって、第2の態様におけるように、以下のことは、サブブロックをバイパスすべきか否か(すなわち、BDOFがバイパスされるか否か)を決定するために使用されるサブブロックSADを導出するための代替方法を説明する。上記で説明したように、例示的な方法は、式1-6を用いて上記で説明した双方向オプティカルフローにおけるようにθ(i,j)を計算するのと同じ方法で、2つの基準信号の間の差分diff(i,j)を計算する。
【0260】
サブブロックがBDOFを適用すべきと決定される場合、diff(i,j)は、上記で説明した双方向オプティカルフローにおけるように勾配の自己相関および相互相関S3およびS6を計算するためのステップにおいて再使用され得る。
【0261】
第2の態様における(3-1-1-1)の式は次のように修正される。
【0262】
【数14】
【0263】
上の式において、I(k)(i,j)は、参照ピクチャk(k=0,1)の中の予測信号の(sbWidth + 4)×(sbHeight + 4)の領域の中の座標(i,j)におけるサンプル値である。shift2は事前決定された値であり、たとえば、shift2は4に等しい。Ω''は、sbWidth×sbHeightのサブブロック領域である。
【0264】
θ(i,j) = (I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)に基づいてサブブロックに対してひずみ値を決定するための(たとえば、sbSADを決定するための)代替技法が、ピクセル単位BDOFが実行される例に限定されると見なされるべきでないことに、留意されたい。サブブロックに対してひずみ値を決定するための代替技法は、サブブロックBDOFまたはいくつかの他のBDOF技法が適用される例にさえ適用可能であってよい。たとえば、サブブロックBDOFに対してさえ、ビデオエンコーダ200およびビデオデコーダ300は、ひずみ値を決定するための代替技法を、サブブロックに対してBDOFが実行されるか否かを決定するために利用してよい。BDOFが実行されることになる場合、ビデオエンコーダ200およびビデオデコーダ300は、代替技法がひずみ値を決定するための計算を、サブブロックBDOFの一部として動き改善を決定するために再使用してよい(たとえば、代替技法がひずみ値を決定するための計算の再使用があってよい)。
【0265】
上記で説明したように、ピクセル単位BDOFが実行されるのかそれともBDOFがバイパスされるのかを決定するためにひずみ値がそれと比較されるしきい値は、上の式3-1-1-2に示すように(sbWidth*sbHeight*s) << nとして計算されるsbDistThである。しかしながら、ひずみ値を決定するための代替技法では、ビデオエンコーダ200およびビデオデコーダ300は、上記で説明したように、>> shift2によってI(0)(i,j)をスケーリングしてよく、>> shift2によってI(1)をスケーリングしてよい。したがって、いくつかの例では、ビデオエンコーダ200およびビデオデコーダ300がsbDistThを決定する方式は、>> shift2スケーリングを考慮に入れるように修正されてよい。
【0266】
sbDistThを計算するための第2の態様における(3-1-1-2)の式は、次のように修正される。
sbDistTh = (sbWidth・sbHeight・s) << (n - shift2) (3-2-2)
【0267】
上の式において、nおよびsは事前決定された値である。たとえば、nは、n = InternalBitDepth - bitDepth + 1として導出され得る。上の式において、sはスケール係数を表し、たとえば、s = 1である。現在のバージョンのVVCでは、InternalBitDepthはbitDepth10において14に等しく、したがって、nは5に等しい。スケールsは、1、2、3、事前定義された他の値であってよく、またはビットストリームの中でシグナリングされてもよい。
【0268】
したがって、しきい値を決定するために、ビデオエンコーダ200およびビデオデコーダ300は、1つまたは複数のサブブロックのうちの第1のサブブロックの幅(すなわち、式3-2-2の中のsbWidth)、1つまたは複数のサブブロックのうちの第1のサブブロックの高さ(すなわち、式3-2-2の中のsbHeight)、および第1のスケール係数(すなわち、式3-2-2の中の「s」)を乗算して中間値を生成するように構成され得る。ビデオエンコーダ200およびビデオデコーダ300は、第2のスケール係数に基づいて中間値に対して左シフト演算を実行してしきい値を生成するように構成され得る。たとえば、第2のスケール係数は式3-2-2の中の(n - shift2)であってよく、左シフト演算は式3-2-2の中の「<<」として示される。
【0269】
1つまたは複数の例では、ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックに対するひずみ値(たとえば、ひずみ値を決定するための代替技法を使用して計算されたひずみ値)をしきい値(たとえば、式3-2-2において決定されるようなsbDistTh)と比較してよい。ビデオエンコーダ200およびビデオデコーダ300は、第1のサブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを、その比較に基づいて決定してよい。たとえば、ひずみ値がしきい値よりも小さい場合(たとえば、図13の中の1306のYES)、ビデオエンコーダ200およびビデオデコーダ300はBDOFをバイパスしてよい。ひずみ値がしきい値よりも大きい場合(たとえば、図13の中の1306のNO)、ビデオエンコーダ200およびビデオデコーダ300はピクセル単位BDOFを実行してよい。
【0270】
第4の態様は、thWおよびthHの値を決定することに関する。上の態様におけるように、例示的な技法は双予測されるコーディングブロックに適用されてよい。サブブロックの総数が、現在ブロックの幅および高さ、ならびにサブブロックの最大サブブロック幅(thW)および高さ(thH)から導出される。
【0271】
現在のコーディングブロックがサブブロックベースの方法、たとえば、DMVRを適用するとき、thWおよびthHの値は、先に行われた方法(たとえば、DMVR)の最大サブブロック幅および高さに等しいかまたはそれよりも小さいはずである。
【0272】
thWおよびthHの値は、固定の事前決定された値であり得、たとえば、thWは8に等しく、thHは8に等しい。thWおよびthHの値は適応的であり得、その値はビットストリームからの復号された情報によって決定される。以下のことは、thWおよびthHの値が適応的となるための方法を説明する。
a.先に行われたコーディング方法によって決定される。現在のコーディングブロックがサブブロックベースの方法を適用する場合、thWおよびthHは先に行われた方法と同じサブブロック寸法に設定され得る。たとえば、現在のコーディングブロックにDMVRが適用されるとき、thWは、DMVR最大サブブロック幅、たとえば、16に等しくなるように設定され、thHは、DMVR最大サブブロック高さ、たとえば、16に等しくなるように設定される。そうでない場合(現在のコーディングブロックが、いかなるサブブロックベースの方法も適用しない場合)、thWおよびthHは、事前決定された値、たとえば、8に設定され得る。
b.現在のコーディングブロック寸法によって決定される。この例では、しきい値T(たとえば、T=128)よりも大きいルーマサンプルの総数を有するコーディングブロックには、thWおよびthHのうちの大きい方の値が設定される。W×Hのコーディングブロックが与えられると、W*HがTよりも大きい場合、thWおよびthHの値を16に等しく設定する。そうでない場合(W*HがTに等しいかまたはそれよりも小さい場合)、thWおよびthHの値を8に等しく設定する。
【0273】
第5の態様は、サブブロックバイパスを伴うピクセル単位BDOFを適用することの例示的なデコーダプロセスに関する。上の態様は、エンコーダ(たとえば、ビデオエンコーダ200)および/またはデコーダ(たとえば、ビデオデコーダ300)の中で適用され得る。デコーダ(たとえば、ビデオデコーダ300)は、ビットストリームからのピクチャの中のインター予測ブロックを復号するための以下のステップの全部またはサブセットによって、ここで説明する方法を実行してよい。
1.ビットストリームの中のシンタックス要素を復号することによって、現在ブロックの左上のルーマ位置として位置成分(cbX,cbY)を導出する。
2.ビットストリームの中のシンタックス要素を復号することによって、幅値Wおよび高さ値Hとして現在ブロックのサイズを導出する。
3.ビットストリームの中の要素を復号することから、現在ブロックがインター予測ブロックであることを決定する。
4.ビットストリームの中の要素を復号することから、現在ブロックの動きベクトル成分(mvL0およびmvL1)および参照インデックス(refPicL0およびrefPicL1)を導出する。
5.ビットストリームの中の要素を復号することからフラグを推測し、フラグは、デコーダ側動きベクトル導出(たとえば、DMVR、双方向マージ、テンプレートマッチング)が現在ブロックに適用されるか否かを示す。フラグの推定方式は、限定はしないが、DMVRがいつ有効化されるのかに対する有効化条件に関して上記で説明した例と同じであり得る。別の例では、このフラグは、デコーダにおける複雑な条件チェックを避けるためにビットストリームの中で明示的にシグナリングされてよい。
6.現在ブロックにDMVRを適用すべきと決定される場合、改善された動きベクトルを導出する。
7.復号されたrefPicL0、refPicL1、および動きベクトルから、2つの(W + 6)×(H + 6)のルーマ予測サンプルアレイpredSampleL0およびpredSampleL1を導出し、DMVRを適用すべきと決定される場合、動きベクトルは改善された動きベクトルであり、そうでない場合、動きベクトルはmvL0、mvL1である。
8.ビットストリームの中の要素を復号することからフラグを推測し、フラグは、双方向オプティカルフローが現在ブロックに適用されるか否かを示す。フラグの推定方式は、限定はしないが、双方向オプティカルフローと同じであり得る。別の例では、このフラグは、デコーダにおける複雑な条件チェックを避けるためにビットストリームの中で明示的にシグナリングされてよい。
9.上述のフラグ値に従って、決定が、BDOFを現在ブロックに適用することである場合、水平方向におけるサブブロックの個数numSbXおよび垂直方向におけるサブブロックの個数numSbY、サブブロック幅sbWidthおよびサブブロック高さsbHeightを、次のように導出する。
・numSbX = (W > thW) ? (W / thW) : 1
・numSbY = (H > thH) ? (H / thH) : 1
・sbWidth = (W > thW) ? thW : W
・sbHeight = (H > thH) ? thH : H
ただし、thWおよびthHは事前決定された整数値である(たとえば、thW = thH = 8)。
10.次のように変数sbDistThを導出する。
sbDistTh = sbWidth * sbHeight * s << (n - shift2)
ただし、
shift2は事前決定された値であり、たとえば、shift2は4に等しい。
nは事前決定された値であり、たとえば、n = InternalBitDepth - bitDepth + 1 = 5である。
sはスケール係数であり、たとえば、s = 1である。
11.現在ブロックの第1のサブブロックの左上のルーマ位置として位置成分(sbX,sbY) = (0,0)を設定する。
12.(sbX,sbY)における各サブブロックに対して、sbXがWよりも小さくsbYがHよりも小さいとき、以下のステップが適用される。
12.1. x = sbX - 2...sbX + sbWidth + 1、y = sbY - 2...sbY + sbHeight + 1に対して、変数diff[x][y]が次のように導出される。
・diff[x][y] = (predSamplesL0[x][y] >> shift2) - (predSamplesL1[x][y] >> shift2)
ただし、shift2は事前決定された値であり、たとえば、shift2は4に等しい。
12.2. 変数sbDistを次のように導出する。
・sbDist = ΣiΣjAbs(diff[sbX + i][sbY + j])
ただし、i = 0...sbWidth - 1、j = 0...sbHeight - 1
12.3. (サブブロックBDOFをバイパスする)sbDistがsbDistThよりも小さい場合、次のようにサブブロックの予測信号を導出する。
12.3.1. x = sbX...sbX + sbWidth - 1、y = sbY...sbY + sbHeight - 1に対して、
・predSamples[x + cbX][y + cbY] = Clip3(0,(2BitDepth) - 1,(predSamplesL0[x][y] + predSamplesL1[x][y] + offset5) >> shift5)
ただし、
shift5は、Max(3,15 - BitDepth)に等しく設定され、
offset5は、(1 << (shift5 - 1))に等しく設定される。
12.4. そうでない場合(sbDistがsbDistThに等しいかまたはそれよりも大きい場合)、以下のステップが適用される。
12.4.1. x = sbX - 2...sbX + sbWidth + 1、y = sbY - 2...sbY + sbHeight + 1に対して、変数gradientHL0[x][y]、gradientVL0[x][y]、gradientHL1[x][y]、およびgradientVL1[x][y]が次のように導出される。
・gradientHL0[x][y] = (predSamplesL0[x + 1][y] >> shift1) - (predSamplesL0[x - 1][y] >> shift1)
・gradientVL0[x][y] = (predSamplesL0[x][y + 1] >> shift1) - (predSamplesL0[x][y - 1] >> shift1)
・gradientHL1[x][y] = (predSamplesL1[x + 1][y] >> shift1) - (predSamplesL1[x - 1][y] >> shift1)
・gradientVL1[x][y] = (predSamplesL1[x][y + 1] >> shift1) - (predSamplesL1[x][y - 1] >> shift1)
ただし、shift1は事前決定された値であり、たとえば、shift1は6に等しく設定される。
12.4.2. x = sbX - 2...sbX + sbWidth + 1, y = sbY - 2...sbY + sbHeight + 1に対して、変数tempH[x][y]およびtempV[x][y]が次のように導出される。
・tempH[x][y] = (gradientHL0[x][y] + gradientHL1[x][y]) >> shift3
・tempV[x][y] = (gradientVL0[x][y] + gradientVL1[x][y]) >> shift3
ただし、shift3は事前決定された値であり、たとえば、shift3は1に等しく設定される。
12.4.3. (piX,piY)における各ピクセルに対して、piX = sbX...sbX + sbWidth - 1、piY = sbY...sbY + sbHeight - 1であって、以下のステップが適用される。
12.4.3.1. 変数sGx2、sGy2、sGxGy、sGxdI、およびsGydIが次のように導出される。
・sGx2 = ΣiΣjAbs(tempH[piX + i][piY + j])
・sGy2 = ΣiΣjAbs(tempV[piX + i][piY + j])
・sGxGy = ΣiΣj(Sign(tempV[piX + i][piY + j]) * tempH[piX + i][piY + j])
・sGxdI = ΣiΣj(-Sign(tempH[piX + i][piY + j]) * diff[piX + i][piY + j])
・sGydI = ΣiΣj(-Sign(tempV[piX + i][piY + j]) * diff[piX + i][piY + j])
ただし、i = -2...2、j = -2...2である。
12.4.3.2. 現在ピクセルの水平動きオフセットおよび垂直動きオフセットが次のように導出される。
・vx = sGx2 > 0 ? Clip3(-mvRefineThres + 1, mvRefineThres - 1, (sGxdI << 2) >> Floor(Log2(sGx2))) : 0
・vy = sGy2 > 0 ? Clip3(-mvRefineThres + 1, mvRefineThres - 1, ((sGydI << 2) - ((vx * sGxGy) >> 1)) >> Floor(Log2(sGy2))) : 0
ただし、mvRefineThresは事前決定された値であり、たとえば、mvRefineThresは(1 << 4)に等しく設定される。
12.4.3.3. 現在ピクセルの予測信号が次のように導出される。
・bdofOffset = vx * (gradientHL0[piX][piY] - gradientHL1[piX][piY]) + vy * (gradientVL0[piX][piY] - gradientVL1[piX][piY])
・predSamples[piX + cbW][piY + cbY] = Clip3(0,(2BitDepth) - 1,(predSamplesL0[xPix][yPix] + predSamplesL1[xPix][yPix] + bdofOffset + offset5) >> shift5)
ただし、
shift5はMax(3,15 - BitDepth)に等しく設定され、
offset5は(1 << (shift5 - 1))に等しく設定される。
12.5. 左上のルーマ位置としてのサブブロックを次のように更新する。
・sbX = (sbX + sbWidth) < W ? sbX + sbWidth : 0
・sbY = (sbX + sbWidth) < W ? sbY : sbY + sbHeight
13.各サブブロックの導出された予測信号を使用して、予測されたブロックを導出し、導出かつ予測されたブロックをビデオ復号のために使用する。
【0274】
図15は、本開示の技法による、ビデオデータを復号するための例示的な方法を示すフローチャートである。現在ブロックは、現在CUを備えてよい。ビデオデコーダ300(図1および図4)に関して説明するが、他のデバイスが図15の方法と類似の方法を実行するように構成され得ることを理解されたい。たとえば、予測処理ユニット304および/または動き補償ユニット316は、図15の例示的な技法を実行するように構成され得る。予測処理ユニット304および/または動き補償ユニット316は、DPB314などのメモリまたはビデオデコーダ300の他のメモリに結合されてよい。いくつかの例では、ビデオデコーダ300は、図15の例示的な技法を実行するためにビデオデコーダ300によって使用される情報を記憶するメモリ120に結合されてよい。
【0275】
ビデオデコーダ300は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定してよい(1500)。たとえば、ビデオデコーダ300は、ブロックに対してBDOFが有効化されることを示すシグナリングを受信し得る。いくつかの例では、ビデオデコーダ300は、いくつかの基準が満たされることに基づくなどして、ブロックに対してBDOFが有効化されることを推測してよい(たとえば、シグナリングを受信することなく決定してよい)。
【0276】
ビデオデコーダ300は、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割してよい(1502)。たとえば、ビデオデコーダ300は、ブロックをN個のサブブロックに分割してよい。場合によっては、サブブロックのうちの2つ以上が、異なるサイズであってよいが、サブブロックが、同じサイズを有することが可能である。ビデオデコーダ300は、シグナリングされる情報に基づいて、または推定によって、どのようにブロックを分割すべきかを決定してよい。
【0277】
ビデオデコーダ300は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定してよい(1504)。ビデオデコーダ300がそれぞれのひずみ値を決定し得る様々な方法があり得る。一例として、ビデオデコーダ300は、第1の参照ブロック(たとえば、I(0)(i,j))を決定してよく、第2の参照ブロック(たとえば、I(1)(i,j))を決定してよい。ビデオデコーダ300は、I(0)(i,j)とI(1)(i,j)との間の絶対差分和(SAD)を計算してよい。
【0278】
しかしながら、例示的な技法はそのように限定されない。いくつかの例では、ビデオデコーダ300は、上記で説明したように、ひずみ値を決定するための代替技法を実行してよい。たとえば、ビデオデコーダ300は、1つまたは複数のサブブロックのうちの第1のサブブロックのための第1の参照ブロックの中のサンプル値の第1のセットを決定してよい(たとえば、I(0)(i,j)を決定してよい)。ビデオデコーダ300は、スケーリングされたサンプル値の第1のセットを生成するために、スケール係数を用いてサンプル値の第1のセットをスケーリングしてよい(たとえば、スケーリングされたサンプル値の第1のセットを生成するためにI(0)(i,j) << shift2を決定してよい)。ビデオデコーダ300は、1つまたは複数のサブブロックのうちの第1のサブブロックのための第2の参照ブロックの中のサンプル値の第2のセットを決定してよい(たとえば、I(1)(i,j)を決定してよい)。ビデオデコーダ300は、スケーリングされたサンプル値の第2のセットを生成するために、スケール係数を用いてサンプル値の第2のセットをスケーリングしてよい(たとえば、スケーリングされたサンプル値の第2のセットを生成するためにI(1)(i,j) << shift2を決定してよい)。1つまたは複数の例では、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するために、ビデオデコーダ300は、第1のサブブロックに対して、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットに基づいてそれぞれのひずみ値のひずみ値を決定する(たとえば、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットに基づいてSADを決定する)ように構成され得る。
【0279】
ビデオデコーダ300は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定してよい(1506)。たとえば、図13に関して説明したように、ビデオデコーダ300にとって2つのオプションがあってよく、サブブロックに対してピクセル単位BDOFを実行するかまたはBDOFをバイパスするかのいずれかである。いくつかの例では、サブブロックを評価するとき、ビデオデコーダ300にとって他のオプションがない場合がある。
【0280】
いくつかの例では、ピクセル単位BDOFを実行すべきかそれともBDOFをバイパスすべきかを決定するために、ビデオエンコーダ200およびビデオデコーダ300はしきい値を決定してよい。しきい値を決定するための1つの例示的な方法は、sbDistTh = (sbWidth・sbHeight・s) << nである。しかしながら、ひずみ値を決定するための代替技法が利用される例では、ビデオデコーダ300は、sbDistTh = (sbWidth・sbHeight・s) << (n - shift2)としてしきい値を決定してよい。
【0281】
すなわち、ビデオデコーダ300は、中間値を生成するために、1つまたは複数のサブブロックのうちの第1のサブブロックの幅(たとえば、sbWidth)、1つまたは複数のサブブロックのうちの第1のサブブロックの高さ(たとえば、sbHeight)、および第1のスケール係数(たとえば、「s」)を乗算してよい。ビデオデコーダ300は、しきい値を生成するために、第2のスケール係数に基づいて中間値に対して左シフト演算を実行してよい(たとえば、<< (n - shift2)を実行してよく、ただし、(n - shift2)は第2のスケール係数である)。
【0282】
ビデオデコーダ300は、第1のサブブロックに対するそれぞれのひずみ値のひずみ値をしきい値と比較してよい。図13の決定ブロック1306に示すように、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するために、ビデオデコーダ300は、第1のサブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを比較に基づいて決定してよい。
【0283】
ビデオデコーダ300は、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するように構成され得る(1508)。一例として、予測サンプルを決定するために、ビデオデコーダ300は、1つまたは複数のサブブロックのうちの第1のサブブロックに対してピクセル単位BDOFが実行されることを決定してよい。この例では、ビデオデコーダ300は、第1のサブブロックの中の各サンプルに対してそれぞれの動き改善を決定してよく、第1のサブブロックの中の各サンプルに対して、第1のサブブロックのための予測ブロックの中のサンプルからのそれぞれの改善されたサンプル値をそれぞれの動き改善に基づいて決定してよい。
【0284】
たとえば、ビデオデコーダ300は、predBDOF(x,y) = (I(0)(x,y) + I(1)(x,y) + b'(x,y) + οoffset) >> shift5という演算を実行してよい。predBDOFは、改善されたサンプル値を表してよい。この例では、I(0)(x,y) + I(1)(x,y)が予測ブロックと見なされてよい。b'(x,y)に対する値は、サブブロックの中の各サンプルに対してそれぞれの動き改善(v'x,v'y)によって決定されてよい。したがって、改善されたそれぞれのサンプル値(たとえば、predBDOF)は、予測ブロックおよびそれぞれの動き改善に基づく。
【0285】
動き改善(v'x,v'y)を決定するための様々な方法があってよい。動き改善を決定することの一部として、ビデオデコーダ300は、θ(i,j) = (I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)を含む、自己相関および相互相関を決定してよい。ひずみ値を決定するための代替技法が使用される場合などの、1つまたは複数の例では、ビデオデコーダ300は、第1のサブブロックに対するひずみ値を決定するための(I(0)(i,j) >> shift2) - (I(1)(i,j) >> shift2)をすでに決定していることがある。そのような例では、ビデオデコーダ300は、ピクセル単位BDOFに対するピクセル単位動き改善を決定するために、スケーリングされたサンプル値の第1のセット(たとえば、I(0)(i,j) >> shift2)およびスケーリングされたサンプル値の第2のセット(たとえば、I(1)(i,j) >> shift2)を再使用してよい(たとえば、θ(i,j)に対する値は、I(0)(i,j) >> shift2およびI(1)(i,j) >> shift2を再計算することなく決定され得る)。
【0286】
ビデオデコーダ300は、予測サンプルに基づいてブロックを再構成してよい(1510)。たとえば、予測サンプルに基づいてブロックを再構成することは、ビデオデコーダ300が、予測サンプルとブロックのサンプルとの間の差分を示す残差値を受信することと、残差値を予測サンプルに加算してブロックを再構成することとを含んでよい。
【0287】
上記のことは、ブロックのそれぞれのサブブロックに関する例を提供する。以下のことは、2つのサブブロックがあり一方のサブブロックに対してピクセル単位BDOFが実行され他方のサブブロックに対してBDOFがバイパスされる一例である。
【0288】
たとえば、1つまたは複数のサブブロックのうちの第1のサブブロックに対して、ビデオデコーダ300は、それぞれのひずみ値のうちの第1のひずみ値を決定してよく、1つまたは複数のサブブロックのうちの第2のサブブロックに対して、ビデオデコーダ300は、それぞれのひずみ値のうちの第2のひずみ値を決定してよい。
【0289】
複数のサブブロックのうちの第1のサブブロックに対して、ビデオデコーダ300は、第1のサブブロックに対してBDOFが有効化されることを第1のひずみ値に基づいて(たとえば、しきい値との第1のひずみ値の比較に基づいて)決定してよい。第1のサブブロックに対してBDOFが有効化されるという決定に基づいて、ビデオデコーダ300は、第1のサブブロックのための予測サンプルの第1のセットを改善するためのピクセル単位動き改善を決定してよい。たとえば、ビデオデコーダ300は、第1のサブブロックの第1のサンプルに対して、第1の予測サンプルを改善するための第1の動き改善を導出してよく、第1のサブブロックの第2のサンプルに対して、第2の予測サンプルを改善するための第2の動き改善を導出してよく、以下同様である。
【0290】
複数のサブブロックのうちの第2のサブブロックに対して、ビデオデコーダ300は、BDOFがバイパスされることを第2のひずみ値に基づいて(たとえば、しきい値との第2のひずみ値の比較に基づいて)決定してよい。第2のブロックに対してBDOFがバイパスされるという決定に基づいて、ビデオデコーダ300は、第2のサブブロックのための予測サンプルの第2のセットを改善するためのピクセル単位動き改善を決定することをバイパスしてよい。たとえば、ビデオデコーダ300は、第1のサブブロックの第1のサンプルに対して、第1の予測サンプルを改善するための第1の動き改善の導出をバイパスしてよく、第1のサブブロックの第2のサンプルに対して、第2の予測サンプルを改善するための第2の動き改善の導出をバイパスしてよく、以下同様である。
【0291】
第1のサブブロックに対して、ビデオデコーダ300は、第1のサブブロックの予測サンプルの改善された第1のセットを第1のサブブロックのためのピクセル単位動き改善に基づいて決定してよい(たとえば、本開示で説明する例示的な技法を使用してpredBDOFを決定してよい)。第2のサブブロックに対して、ビデオデコーダ300は、予測サンプルの第2のセットを改善するためのピクセル単位動き改善に基づいて予測サンプルの第2のセットを改善することなく、予測サンプルの第2のセットを決定してよい。すなわち、第2のサブブロックに対して、BDOFはバイパスされる。ビデオデコーダ300は、参照ブロックの重み付き平均に基づいて予測ブロックを決定することなどの、様々な技法に基づいて第2のサブブロックのための予測サンプルを決定してよい。
【0292】
図16は、本開示の技法による、ビデオデータを符号化する例示的な方法を示すフローチャートである。現在ブロックは、現在CUを備えてよい。ビデオエンコーダ200(図1および図3)に関して説明するが、他のデバイスが図16の方法と類似の方法を実行するように構成され得ることを理解されたい。たとえば、動き選択ユニット202および/または動き補償ユニット224は、図16の例示的な技法を実行するように構成され得る。動き選択ユニット202および/または動き補償ユニット224は、DPB218などのメモリまたはビデオエンコーダ200の他のメモリに結合されてよい。いくつかの例では、ビデオエンコーダ200は、図16の例示的な技法を実行するためにビデオエンコーダ200によって使用される情報を記憶するメモリ106に結合されてよい。一般に、ビデオエンコーダ200は、予測サンプルを生成するためにビデオデコーダ300と同じ動作を実行してよい。
【0293】
ビデオエンコーダ200は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定してよい(1600)。たとえば、ビデオエンコーダ200は、異なるコーディングモードに関連するレートひずみコストを決定してよく、レートひずみコストに基づいて、ブロックに対してBDOFが有効化されることを決定してよい。
【0294】
ビデオエンコーダ200は、ブロックに対してBDOFが有効化されるとき、ブロックを複数のサブブロックに分割してよい(1602)。ビデオエンコーダ200は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定してよい(1604)。ビデオエンコーダ200は、ビデオデコーダ300がそれぞれのひずみ値を決定するための、説明した技法と同じ技法を実行してよい。
【0295】
ビデオエンコーダ200は、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定してよい(1606)。たとえば、ビデオエンコーダ200は、ピクセル単位BDOFが実行されるのかそれともBDOFがバイパスされるのかを示す情報をシグナリングしないことがあるので、ビデオエンコーダ200は、各サブブロックに対してピクセル単位BDOFが実行されるのかそれともBDOFがバイパスされるのかを決定するために、ビデオデコーダ300と同じ動作を実行してよい。
【0296】
ビデオエンコーダ200は、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定してよい(1608)。ビデオエンコーダ200は、予測サンプルとブロック(たとえば、それぞれのサブブロック)のサンプルとの間の残差値をシグナリングしてよい(1610)。
【0297】
以下のことは、一緒にまたは別個に適用され得るいくつかの例示的な技法を説明する。
【0298】
条項1. ビデオデータを復号する方法であって、方法は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定することと、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割することと、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定することと、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定することと、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定することと、予測サンプルに基づいてブロックを再構成することとを備える。
【0299】
条項2. 条項1の方法であって、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定することは、1つまたは複数のサブブロックのうちの第1のサブブロックに対して、それぞれのひずみ値のうちの第1のひずみ値を決定することと、1つまたは複数のサブブロックのうちの第2のサブブロックに対して、それぞれのひずみ値のうちの第2のひずみ値を決定することとを備え、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定することは、複数のサブブロックのうちの第1のサブブロックに対して、第1のサブブロックに対してBDOFが有効化されることを第1のひずみ値に基づいて決定することと、第1のサブブロックに対してBDOFが有効化されるという決定に基づいて、第1のサブブロックのための予測サンプルの第1のセットを改善するためのピクセル単位動き改善を決定することと、複数のサブブロックのうちの第2のサブブロックに対して、BDOFがバイパスされることを第2のひずみ値に基づいて決定することと、第2のブロックに対してBDOFがバイパスされるという決定に基づいて、第2のサブブロックのための予測サンプルの第2のセットを改善するためのピクセル単位動き改善を決定することをバイパスすることとを備え、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定することは、第1のサブブロックに対して、第1のサブブロックの予測サンプルの改善された第1のセットを第1のサブブロックのためのピクセル単位動き改善に基づいて決定することと、第2のサブブロックに対して、予測サンプルの第2のセットを改善するためのピクセル単位動き改善に基づいて予測サンプルの第2のセットを改善することなく、予測サンプルの第2のセットを決定することとを備える。
【0300】
条項3. 条項1および2のうちのいずれかの方法であって、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定することは、1つまたは複数のサブブロックのうちの第1のサブブロックに対してピクセル単位BDOFが実行されることを決定することを備え、方法は、第1のサブブロックの中の各サンプルに対してそれぞれの動き改善を決定することをさらに備え、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定することは、第1のサブブロックの中の各サンプルに対して、第1のサブブロックのための予測ブロックの中のサンプルからのそれぞれの改善されたサンプル値をそれぞれの動き改善に基づいて決定することを備える。
【0301】
条項4. 条項1~3のうちのいずれかの方法であって、中間値を生成するために、1つまたは複数のサブブロックのうちの第1のサブブロックの幅、1つまたは複数のサブブロックのうちの第1のサブブロックの高さ、および第1のスケール係数を乗算することと、しきい値を生成するために、第2のスケール係数に基づいて中間値に対して左シフト演算を実行することと、第1のサブブロックに対するそれぞれのひずみ値のひずみ値をしきい値と比較することとをさらに備え、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定することは、第1のサブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを比較に基づいて決定することを備える。
【0302】
条項5. 条項1~4のうちのいずれかの方法であって、1つまたは複数のサブブロックのうちの第1のサブブロックのための第1の参照ブロックの中のサンプル値の第1のセットを決定することと、スケーリングされたサンプル値の第1のセットを生成するために、スケール係数を用いてサンプル値の第1のセットをスケーリングすることと、1つまたは複数のサブブロックのうちの第1のサブブロックのための第2の参照ブロックの中のサンプル値の第2のセットを決定することと、スケーリングされたサンプル値の第2のセットを生成するために、スケール係数を用いてサンプル値の第2のセットをスケーリングすることとをさらに備え、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定することは、第1のサブブロックに対して、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットに基づいてそれぞれのひずみ値のひずみ値を決定することを備える。
【0303】
条項6. 条項5の方法であって、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定することは、第1のサブブロックに対してピクセル単位BDOFが実行されることを決定することを備え、方法は、ピクセル単位BDOFに対するピクセル単位動き改善を決定するために、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットを再使用することをさらに備える。
【0304】
条項7. 条項5の方法であって、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定することは、第1のサブブロックに対してピクセル単位BDOFが実行されることを決定することを備え、方法は、BDOFに対する動き改善を決定するために、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットを再使用することをさらに備える。
【0305】
条項8. 条項1~7のうちのいずれかの方法であって、ブロックを再構成することは、予測サンプルとブロックのサンプルとの間の差分を示す残差値を受信することと、残差値を予測サンプルに加算してブロックを再構成することとを備える。
【0306】
条項9. ビデオデータを復号するためのデバイスであって、デバイスは、ビデオデータを記憶するように構成されたメモリと、メモリに結合された処理回路構成とを備え、処理回路構成は、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定し、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割し、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定し、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定し、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定し、予測サンプルに基づいてブロックを再構成するように構成される。
【0307】
条項10. 条項9のデバイスであって、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するために、処理回路構成は、1つまたは複数のサブブロックのうちの第1のサブブロックに対して、それぞれのひずみ値のうちの第1のひずみ値を決定し、1つまたは複数のサブブロックのうちの第2のサブブロックに対して、それぞれのひずみ値のうちの第2のひずみ値を決定するように構成され、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するために、処理回路構成は、複数のサブブロックのうちの第1のサブブロックに対して、第1のサブブロックに対してBDOFが有効化されることを第1のひずみ値に基づいて決定し、第1のサブブロックに対してBDOFが有効化されるという決定に基づいて、第1のサブブロックのための予測サンプルの第1のセットを改善するためのピクセル単位動き改善を決定し、複数のサブブロックのうちの第2のサブブロックに対して、BDOFがバイパスされることを第2のひずみ値に基づいて決定し、第2のブロックに対してBDOFがバイパスされるという決定に基づいて、第2のサブブロックのための予測サンプルの第2のセットを改善するためのピクセル単位動き改善を決定することをバイパスするように構成され、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するために、処理回路構成は、第1のサブブロックに対して、第1のサブブロックの予測サンプルの改善された第1のセットを第1のサブブロックのためのピクセル単位動き改善に基づいて決定し、第2のサブブロックに対して、予測サンプルの第2のセットを改善するためのピクセル単位動き改善に基づいて予測サンプルの第2のセットを改善することなく、予測サンプルの第2のセットを決定するように構成される。
【0308】
条項11. 条項9および10のうちのいずれかのデバイスであって、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するために、処理回路構成は、1つまたは複数のサブブロックのうちの第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するように構成され、処理回路構成は、第1のサブブロックの中の各サンプルに対してそれぞれの動き改善を決定するようにさらに構成され、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するために、処理回路構成は、第1のサブブロックの中の各サンプルに対して、第1のサブブロックのための予測ブロックの中のサンプルからのそれぞれの改善されたサンプル値をそれぞれの動き改善に基づいて決定するように構成される。
【0309】
条項12. 条項9~11のうちのいずれかのデバイスであって、処理回路構成は、中間値を生成するために、1つまたは複数のサブブロックのうちの第1のサブブロックの幅、1つまたは複数のサブブロックのうちの第1のサブブロックの高さ、および第1のスケール係数を乗算し、しきい値を生成するために、第2のスケール係数に基づいて中間値に対して左シフト演算を実行し、第1のサブブロックに対するそれぞれのひずみ値のひずみ値をしきい値と比較するように構成され、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するために、処理回路構成は、第1のサブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを比較に基づいて決定するように構成される。
【0310】
条項13. 条項9~12のうちのいずれかのデバイスであって、処理回路構成は、1つまたは複数のサブブロックのうちの第1のサブブロックのための第1の参照ブロックの中のサンプル値の第1のセットを決定し、スケーリングされたサンプル値の第1のセットを生成するために、スケール係数を用いてサンプル値の第1のセットをスケーリングし、1つまたは複数のサブブロックのうちの第1のサブブロックのための第2の参照ブロックの中のサンプル値の第2のセットを決定し、スケーリングされたサンプル値の第2のセットを生成するために、スケール係数を用いてサンプル値の第2のセットをスケーリングするように構成され、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するために、処理回路構成は、第1のサブブロックに対して、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットに基づいてそれぞれのひずみ値のひずみ値を決定するように構成される。
【0311】
条項14. 条項13のデバイスであって、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するために、処理回路構成は、第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するように構成され、処理回路構成は、ピクセル単位BDOFに対するピクセル単位動き改善を決定するために、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットを再使用するように構成される。
【0312】
条項15. 条項13のデバイスであって、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するために、処理回路構成は、第1のサブブロックに対してピクセル単位BDOFが実行されることを決定するように構成され、処理回路構成は、BDOFに対する動き改善を決定するために、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットを再使用するように構成される。
【0313】
条項16. 条項9~15のうちのいずれかのデバイスであって、ブロックを再構成するために、処理回路構成は、予測サンプルとブロックのサンプルとの間の差分を示す残差値を受信し、残差値を予測サンプルに加算してブロックを再構成するように構成される。
【0314】
条項17. 条項9~16のうちのいずれかのデバイスであって、復号ビデオデータを表示するように構成されたディスプレイをさらに備える。
【0315】
条項18. 条項9~17のデバイスであって、デバイスは、カメラ、コンピュータ、モバイルデバイス、ブロードキャスト受信機デバイス、またはセットトップボックスのうちの1つまたは複数を備える。
【0316】
条項19. その上に命令を記憶するコンピュータ可読記憶媒体であって、命令は、実行されたとき、1つまたは複数のプロセッサに、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定させ、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割させ、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定させ、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定させ、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定させ、予測サンプルに基づいてブロックを再構成させる。
【0317】
条項20. 条項19のコンピュータ可読記憶媒体であって、1つまたは複数のプロセッサに、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定させる、命令は、1つまたは複数のプロセッサに、1つまたは複数のサブブロックのうちの第1のサブブロックに対して、それぞれのひずみ値のうちの第1のひずみ値を決定させ、1つまたは複数のサブブロックのうちの第2のサブブロックに対して、それぞれのひずみ値のうちの第2のひずみ値を決定させる、命令を備え、1つまたは複数のプロセッサに、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定させる、命令は、1つまたは複数のプロセッサに、複数のサブブロックのうちの第1のサブブロックに対して、第1のサブブロックに対してBDOFが有効化されることを第1のひずみ値に基づいて決定させ、第1のサブブロックに対してBDOFが有効化されるという決定に基づいて、第1のサブブロックのための予測サンプルの第1のセットを改善するためのピクセル単位動き改善を決定させ、複数のサブブロックのうちの第2のサブブロックに対して、BDOFがバイパスされることを第2のひずみ値に基づいて決定させ、第2のブロックに対してBDOFがバイパスされるという決定に基づいて、第2のサブブロックのための予測サンプルの第2のセットを改善するためのピクセル単位動き改善を決定することをバイパスさせる、命令を備え、1つまたは複数のプロセッサに、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定させる、命令は、1つまたは複数のプロセッサに、第1のサブブロックに対して、第1のサブブロックの予測サンプルの改善された第1のセットを第1のサブブロックのためのピクセル単位動き改善に基づいて決定させ、第2のサブブロックに対して、予測サンプルの第2のセットを改善するためのピクセル単位動き改善に基づいて予測サンプルの第2のセットを改善することなく、予測サンプルの第2のセットを決定させる、命令を備える。
【0318】
条項21. 条項19および20のうちのいずれかのコンピュータ可読記憶媒体であって、1つまたは複数のプロセッサに、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定させる、命令は、1つまたは複数のプロセッサに、1つまたは複数のサブブロックのうちの第1のサブブロックに対してピクセル単位BDOFが実行されることを決定させる、命令を備え、命令は、1つまたは複数のプロセッサに、第1のサブブロックの中の各サンプルに対してそれぞれの動き改善を決定させる、命令をさらに備え、1つまたは複数のプロセッサに、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定させる、命令は、1つまたは複数のプロセッサに、第1のサブブロックの中の各サンプルに対して、第1のサブブロックのための予測ブロックの中のサンプルからのそれぞれの改善されたサンプル値をそれぞれの動き改善に基づいて決定させる、命令を備える。
【0319】
条項22. 条項19~21のコンピュータ可読記憶媒体であって、1つまたは複数のプロセッサに、中間値を生成するために、1つまたは複数のサブブロックのうちの第1のサブブロックの幅、1つまたは複数のサブブロックのうちの第1のサブブロックの高さ、および第1のスケール係数を乗算させ、しきい値を生成するために、第2のスケール係数に基づいて中間値に対して左シフト演算を実行させ、第1のサブブロックに対するそれぞれのひずみ値のひずみ値をしきい値と比較させる、命令をさらに備え、1つまたは複数のプロセッサに、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定させる、命令は、1つまたは複数のプロセッサに、第1のサブブロックに対してピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つを比較に基づいて決定させる、命令を備える。
【0320】
条項23. 条項19~22のうちのいずれかのコンピュータ可読記憶媒体であって、1つまたは複数のプロセッサに、1つまたは複数のサブブロックのうちの第1のサブブロックのための第1の参照ブロックの中のサンプル値の第1のセットを決定させ、スケーリングされたサンプル値の第1のセットを生成するために、スケール係数を用いてサンプル値の第1のセットをスケーリングさせ、1つまたは複数のサブブロックのうちの第1のサブブロックのための第2の参照ブロックの中のサンプル値の第2のセットを決定させ、スケーリングされたサンプル値の第2のセットを生成するために、スケール係数を用いてサンプル値の第2のセットをスケーリングさせる、命令をさらに備え、1つまたは複数のプロセッサに、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定させる、命令は、1つまたは複数のプロセッサに、第1のサブブロックに対して、スケーリングされたサンプル値の第1のセットおよびスケーリングされたサンプル値の第2のセットに基づいてそれぞれのひずみ値のひずみ値を決定させる、命令を備える。
【0321】
条項24. ビデオデータを復号するためのデバイスであって、デバイスは、ビデオデータのブロックに対して双方向オプティカルフロー(BDOF)が有効化されることを決定するための手段と、ブロックに対してBDOFが有効化されるという決定に基づいてブロックを複数のサブブロックに分割するための手段と、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対してそれぞれのひずみ値を決定するための手段と、複数のサブブロックのうちの1つまたは複数のサブブロックの各サブブロックに対して、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるかのうちの1つをそれぞれのひずみ値に基づいて決定するための手段と、ピクセル単位BDOFが実行されるかまたはBDOFがバイパスされるという決定に基づいて1つまたは複数のサブブロックの各サブブロックに対して予測サンプルを決定するための手段と、予測サンプルに基づいてブロックを再構成するための手段とを備える。
【0322】
条項25. ビデオデータをコーディングする方法であって、方法は、入力ブロックを複数のサブブロックに分割することであって、入力ブロックのサイズがコーディングユニットのサイズよりも小さいかまたはそれに等しいことと、複数のサブブロックのうちのサブブロックに双方向オプティカルフロー(BDOF)が適用されることになることを、条件が満たされることに基づいて決定することと、サブブロックを複数のサブサブブロックに分割することと、サブサブブロックのうちの1つまたは複数のための改善された動きベクトルを決定することであって、1つまたは複数のサブサブブロックのうちのサブサブブロックのための改善された動きベクトルがサブサブブロックの中の複数のサンプルにとって同じであることと、1つまたは複数のサブサブブロックのための改善された動きベクトルに基づいてサブブロックに対してBDOFを実行することとを備える。
【0323】
条項26. ビデオデータをコーディングする方法であって、方法は、入力ブロックを複数のサブブロックに分割することであって、入力ブロックのサイズがコーディングユニットのサイズよりも小さいかまたはそれに等しいことと、複数のサブブロックのうちのサブブロックに双方向オプティカルフロー(BDOF)が適用されることになることを、条件が満たされることに基づいて決定することと、サブブロックを複数のサブサブブロックに分割することと、サブブロックの中の1つまたは複数のサンプルの各々のための改善された動きベクトルを決定することと、サブブロックの中の1つまたは複数のサンプルの各々のための改善された動きベクトルに基づいてサブブロックに対してBDOFを実行することとを備える。
【0324】
条項27. 条項25および26のうちのいずれかの方法であって、複数のサブブロックのうちの他のサブブロックに対してBDOFをバイパスすることをさらに備える。
【0325】
条項28. 条項25~27のうちのいずれかの方法であって、条件が満たされることは、参照ピクチャ0および参照ピクチャ1の中の2つの予測信号の間の絶対差分和(SAD)がしきい値よりも小さいかどうかの決定を含む。
【0326】
条項29. 条項25~28のうちのいずれかの方法であって、入力ブロックのサイズはthW×thHであり、thWおよびthHは、固定の事前決定された値、ビットストリームから復号された値のうちの1つもしくは複数に基づくか、またはコーディングユニットを符号化もしくは復号する際のBDOFの前に使用されたブロックのサイズに基づく。
【0327】
条項30. ビデオデータをコーディングする方法であって、方法は、条項25~29のうちのいずれか1つまたはその組合せを備える。
【0328】
条項31. 条項25~30のうちのいずれかの方法であって、BDOFを実行することは、ビデオデータを復号することの一部としてBDOFを実行することを備える。
【0329】
条項32. 条項25~31のうちのいずれかの方法であって、BDOFを実行することは、符号化の再構成ループの中に含む、ビデオデータを符号化することの一部としてBDOFを実行することを備える。
【0330】
条項33. ビデオデータをコーディングするためのデバイスであって、デバイスは、ビデオデータを記憶するためのメモリと、メモリに結合された処理回路構成とを備え、処理回路構成は、条項25~32のうちのいずれか1つまたはその組合せを実行するように構成される。
【0331】
条項34. ビデオデータをコーディングするためのデバイスであって、デバイスは、条項25~32のうちのいずれかの方法を実行するための1つまたは複数の手段を備える。
【0332】
条項35. 条項33および34のうちのいずれかのデバイスであって、復号ビデオデータを表示するように構成されたディスプレイをさらに備える。
【0333】
条項36. 条項33~35のうちのいずれかのデバイスであって、デバイスは、カメラ、コンピュータ、モバイルデバイス、ブロードキャスト受信機デバイス、またはセットトップボックスのうちの1つまたは複数を備える。
【0334】
条項37. 条項33~36のうちのいずれかのデバイスであって、処理回路構成または実行するための手段はビデオデコーダを備える。
【0335】
条項38. 条項33~37のうちのいずれかのデバイスであって、処理回路構成または実行するための手段はビデオエンコーダを備える。
【0336】
条項39. 実行されたとき、条項25~32のうちのいずれかの方法を1つまたは複数のプロセッサに実行させる命令をその上に記憶した、コンピュータ可読記憶媒体。
【0337】
例に応じて、本明細書で説明した技法のうちのいずれかのいくつかの行為またはイベントが、異なるシーケンスで実行されることが可能であり、追加されてよく、統合されてよく、または完全に除外されてよい(たとえば、説明したすべての行為またはイベントが技法の実践にとって必要であるとは限らない)ことを認識されたい。その上、いくつかの例では、行為またはイベントは、連続的にではなく、たとえば、マルチスレッド処理、割込み処理、または複数のプロセッサを通じて並行して実行されてよい。
【0338】
1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装されてよい。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるかまたはコンピュータ可読媒体を介して送信されてよく、ハードウェアベースの処理ユニットによって実行されてよい。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に相当するコンピュータ可読記憶媒体、または、たとえば、通信プロトコルに従って、ある場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体を含んでよい。このようにして、コンピュータ可読媒体は、一般に、(1)非一時的である有形コンピュータ可読記憶媒体、または(2)信号もしくは搬送波などの通信媒体に相当し得る。データ記憶媒体は、本開示で説明した技法の実装のための命令、コード、および/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であってよい。コンピュータプログラム製品はコンピュータ可読媒体を含んでよい。
【0339】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、フラッシュメモリ、または命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用され得るとともに、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。また、いかなる接続も適切にコンピュータ可読媒体と呼ばれる。たとえば、命令が、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義の中に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体が、接続、搬送波、信号、または他の一時的媒体を含まず、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)、およびブルーレイディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記のものの組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【0340】
命令は、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、または他の均等な集積論理回路構成もしくは個別論理回路構成などの、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用する「プロセッサ」および「処理回路構成」という用語は、上記の構造、または本明細書で説明した技法の実装に適した任意の他の構造のうちのいずれかを指すことがある。加えて、いくつかの態様では、本明細書で説明した機能は、符号化および復号のために構成された専用のハードウェアモジュールおよび/もしくはソフトウェアモジュール内で提供されてよく、または複合コーデックの中に組み込まれてもよい。また、技法は、1つまたは複数の回路または論理要素の中に完全に実装され得る。
【0341】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置の中に実装され得る。開示する技法を実行するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが本開示で説明されるが、それらは必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットは、コーデックハードウェアユニットの中で組み合わせられてよく、または好適なソフトウェアおよび/もしくはファームウェアと連携して、上記で説明したような1つまたは複数のプロセッサを含む、相互動作可能なハードウェアユニットの集合によって提供されてよい。
【0342】
様々な例が説明されている。これらおよび他の例は、以下の特許請求の範囲内に入る。
【符号の説明】
【0343】
100 ビデオ符号化および復号システム
102 ソースデバイス
104 ビデオソース
106 メモリ
108 出力インターフェース
110 コンピュータ可読媒体
112 記憶デバイス
114 ファイルサーバ
116 宛先デバイス
118 ディスプレイデバイス
120 メモリ
122 入力インターフェース
130 4分木2分木(QTBT)構造
132 コーディングツリーユニット(CTU)
200 ビデオエンコーダ
202 モード選択ユニット
204 残差生成ユニット
206 変換処理ユニット
208 量子化ユニット
210 逆量子化ユニット
212 逆変換処理ユニット
214 再構成ユニット
216 フィルタユニット
218 復号ピクチャバッファ(DPB)
220 エントロピー符号化ユニット
222 動き推定ユニット
224 動き補償ユニット
226 イントラ予測ユニット
230 ビデオデータメモリ
300 ビデオデコーダ
302 エントロピー復号ユニット
304 予測処理ユニット
306 逆量子化ユニット
308 逆変換処理ユニット
310 再構成ユニット
312 フィルタユニット
314 復号ピクチャバッファ(DPB)
316 動き補償ユニット
318 イントラ予測ユニット
320 コード化ピクチャバッファ(CPB)メモリ
602、604 ブロック
700 現在フレーム
702 参照フレーム
1000 正方形探索パターン
1100、1102 ブロック
図1
図2A
図2B
図3
図4
図5A
図5B
図6A
図6B
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
【国際調査報告】