(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-13
(45)【発行日】2023-11-21
(54)【発明の名称】動き情報保存のための方法及び装置
(51)【国際特許分類】
H04N 19/109 20140101AFI20231114BHJP
H04N 19/167 20140101ALI20231114BHJP
H04N 19/176 20140101ALI20231114BHJP
H04N 19/52 20140101ALI20231114BHJP
H04N 19/70 20140101ALI20231114BHJP
【FI】
H04N19/109
H04N19/167
H04N19/176
H04N19/52
H04N19/70
(21)【出願番号】P 2022510850
(86)(22)【出願日】2019-08-26
(86)【国際出願番号】 EP2019072716
(87)【国際公開番号】W WO2021037337
(87)【国際公開日】2021-03-04
【審査請求日】2022-04-07
(73)【特許権者】
【識別番号】504161984
【氏名又は名称】ホアウェイ・テクノロジーズ・カンパニー・リミテッド
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ガオ、ハン
(72)【発明者】
【氏名】エセンリク、セミ
(72)【発明者】
【氏名】アルシナ、エレナ、アレクサンドロヴナ
(72)【発明者】
【氏名】ワン、ビャオ
(72)【発明者】
【氏名】コトラ、アナンド、メハー
【審査官】田部井 和彦
(56)【参考文献】
【文献】特開2012-023597(JP,A)
【文献】Jianle Chen, Yan Ye, Seung Hwan Kim,Algorithm description for Versatile Video Coding and Test Model 5 (VTM 5) [online],JVET-N1002-v2,インターネット <URL: https://jvet-experts.org/doc_end_user/documents/14_Geneva/wg11/JVET-N1002-v2.zip>,2019年06月11日,第45-47頁
【文献】Semih Esenlik et al.,Non-CE4: Geometrical partitioning for inter blocks [online],JVET-O0489-v4,インターネット <URL: https://jvet-experts.org/doc_end_user/documents/15_Gothenburg/wg11/JVET-O0489-v4.zip>,2019年07月07日
【文献】Edouard Francois (coordinator), Xiaozhen Zheng, Peisong Chen (vice-coordinators),Core Experiment 2: Flexible Motion Partitioning [online],JCTVC-C502,インターネット <URL: https://www.itu.int/wftp3/av-arch/jctvc-site/2010_10_C_Guangzhou/JCTVC-C502.zip>,2010年10月15日
【文献】S. Esenlik et al.,Non-CE4: Geometrical partitioning for inter blocks,JVET-O0489 (JVET-N1001-v5),Version 4,インターネット <URL: https://jvet-experts.org/doc_end_user/documents/15_Gothenburg/wg11/JVET-O0489-v4.zip>,2019年07月07日,第56-57頁、第111-113頁、第217-219頁、第2頁、第1-8頁、第1-3頁
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/109
H04N 19/167
H04N 19/176
H04N 19/52
H04N 19/70
(57)【特許請求の範囲】
【請求項1】
動き情報保存方法であって、現在のブロックが第1のサブブロック及び第2のサブブロックからなり、前記第1のサブブロック及び前記第2のサブブロックは、
幾何学的区分化モードの分割線である共通の境界によって分離され、前記第1のサブブロックは、第1の動き情報に対応し、前記第2のサブブロックは、第2の動き情報に対応し、前記動き情報保存方法は、
前記現在のブロック内のサンプルセットと前記共通の境界との間の距離を決定する段階と、
第3の動き情報が前記サンプルセットに関して保存されるか否かを決定するために、前記距離を閾値と比較する段階であって、前記第3の動き情報は、前記第1の動き情報及び前記第2の動き情報によって導出される、比較する段階と、
を備え
、
前記距離は、前記幾何学的区分化モードに対応付けられた角度パラメータに従って、予め設定されたルックアップテーブルをチェックすることによって決定される計算パラメータに基づいて計算される、動き情報保存方法。
【請求項2】
前記第3の動き情報が前記サンプルセットに関して保存されるか否かを決定するために、前記距離を閾値と比較する段階は、
前記距離の絶対値が前記閾値以下である場合、前記第3の動き情報が前記サンプルセットに関して保存されることを決定する段階、
を含む、請求項1に記載の動き情報保存方法。
【請求項3】
前記距離の前記絶対値が前記閾値よりも大きい場合、前記動き情報保存方法は、
前記距離が正である場合、前記第1の動き情報が前記サンプルセットに関して保存されることを決定する段階、又は、
前記距離が負である場合、前記第2の動き情報が前記サンプルセットに関して保存されることを決定する段階、
をさらに備える、請求項2に記載の動き情報保存方法。
【請求項4】
前記閾値は予め定められている、請求項1~3のいずれか1項に記載の動き情報保存方法。
【請求項5】
前記閾値は、前記共通の境界と水平方向又は垂直方向との間の幾何学的関係に基づく、請求項1~4のいずれか1項に記載の動き情報保存方法。
【請求項6】
前記閾値は、前記共通の境界の直交方向と、前記水平方向又は前記垂直方向との間の角度に基づく、請求項5に記載の動き情報保存方法。
【請求項7】
前記閾値は、前記現在のブロックの幅及び/又は高さに基づく、請求項1~6のいずれか1項に記載の動き情報保存方法。
【請求項8】
前記共通の境界は、
前記角度パラメータ及び距離パラメータによって決定され、前記現在のブロック内の前記サンプルセットと前記共通の境界との間の前記距離を決定する前に、前記動き情報保存方法は、
前記角度パラメータ及び前記距離パラメータを決定する段階、
をさらに備える、請求項1~7のいずれか1項に記載の動き情報保存方法。
【請求項9】
デコーダでは、前記角度パラメータ及び前記距離パラメータを決定する段階は、
ビットストリームから前記角度パラメータ及び前記距離パラメータをパースする段階、又は、
前記ビットストリームからインジケータをパースする段階と、
前記インジケータに基づいて前記角度パラメータ及び前記距離パラメータを取得する段階と、
を含む、請求項8に記載の動き情報保存方法。
【請求項10】
前記計算パラメータは、第1の計算パラメータ、第2の計算パラメータ、および、第3の計算パラメータを含み、
前記角度パラメータ及び前記距離パラメータを決定する段階の後に、前記動き情報保存方法は、
前記角度パラメータに基づいて
前記第1の計算パラメータを決定する段階と、
前記角度パラメータに基づいてtemp角度パラメータを計算する段階と、
前記temp角度パラメータに基づいて
前記第2の計算パラメータを決定する段階と、
前記角度パラメータ及び前記距離パラメータに基づいて
前記第3の計算パラメータを計算する段階と、
をさらに備える、請求項8又は9に記載の動き情報保存方法。
【請求項11】
前記第1の計算パラメータは、前記角度パラメータに従って、
前記ルックアップテーブルをチェックすることによって決定され、前記第2の計算パラメータは、前記temp角度パラメータに従って、前記ルックアップテーブルをチェックすることによって決定され、前記第1の計算パラメータ及び前記第2の計算パラメータは、それぞれ、同じ角度のコサイン値及びサイン値である、請求項10に記載の動き情報保存方法。
【請求項12】
前記距離は、以下によって計算され、
distFromLine=(x+K)*P1+(y+K)*P2-P3
P1、P2、及びP3は、それぞれ、前記第1の計算パラメータ、前記第2の計算パラメータ、及び前記第3の計算パラメータであり、distFromLineは、前記距離を表し、Kは、非負の整数であり、xは、前記サンプルセットにおけるターゲット位置の水平座標を表し、yは、矩形座標系における前記ターゲット位置の垂直座標を表し、前記現在のブロックの左上サンプルの位置は、座標原点として設定され、右方向は、正の水平方向として設定され、下方向は、正の垂直方向として設定される、請求項10又は11に記載の動き情報保存方法。
【請求項13】
Kは1に等しい、請求項12に記載の動き情報保存方法。
【請求項14】
前記ターゲット位置は、前記サンプルセットにおいて予め定められている、請求項12又は13に記載の動き情報保存方法。
【請求項15】
前記予め定められた位置は、前記サンプルセットの左上位置、又は前記サンプルセットの中心位置である、請求項14に記載の動き情報保存方法。
【請求項16】
前記距離のサンプル精度は、整数サンプルよりも高く、
対応して、前記距離は、以下によって計算され、
distFromLine=((x<<N)+K)*P1+((y<<N)+K)*P2-P3
2Nは、前記距離の前記サンプル精度の逆数を表す、請求項12~15のいずれか1項に記載の動き情報保存方法。
【請求項17】
Nは1に等しい、請求項
16に記載の動き情報保存方法。
【請求項18】
前記サンプルセットは、前記現在のブロックのルマサンプルセットである、請求項1~17のいずれか1項に記載の動き情報保存方法。
【請求項19】
前記現在のブロック内の前記サンプルセットと前記共通の境界との間の前記距離を決定する前に、前記動き情報保存方法は、
前記現在のブロックを複数のサンプルセットに分割する段階であって、前記複数のサンプルセットのそれぞれが前記サンプルセットと同じサイズを有する、分割する段階、又は、
前記現在のブロックを前記サンプルセットとして設定する段階、
をさらに備える、請求項1~18のいずれか1項に記載の動き情報保存方法。
【請求項20】
前記サンプルセットは、4×4サンプルアレイである、請求項1~19のいずれか1項に記載の動き情報保存方法。
【請求項21】
前記複数のサンプルセットのそれぞれは、各動き情報保存ユニットに対応し、前記動き情報保存ユニットは、前記第1の動き情報、前記第2の動き情報、及び前記第3の動き情報のうちの1つを保存するために使用される、請求項19に記載の動き情報保存方法。
【請求項22】
前記第1のサブブロック及び前記第2のサブブロックは、三角形区分、台形区分、又は非対称矩形区分である、請求項1~21のいずれか1項に記載の動き情報保存方法。
【請求項23】
前記第1の動き情報は、第1の参照ピクチャリストに基づく動き情報を含み、前記第2の動き情報は、第2の参照ピクチャリストに基づく動き情報を含み、前記第3の動き情報は、前記第1の動き情報及び前記第2の動き情報を含む、請求項1~22のいずれか1項に記載の動き情報保存方法。
【請求項24】
前記第3の動き情報は、予め設定されたフィルタ重みルックアップテーブルに基づいて、前記第1の動き情報及び前記第2の動き情報によって導出される、請求項1~23のいずれか一項に記載の動き情報保存方法。
【請求項25】
動き情報保存装置であって、現在のブロックが第1のサブブロック及び第2のサブブロックからなり、前記第1のサブブロック及び前記第2のサブブロックは、
幾何学的区分化モードの分割線である共通の境界によって分離され、前記第1のサブブロックは、第1の動き情報に対応し、前記第2のサブブロックは、第2の動き情報に対応し、前記動き情報保存装置は、
前記現在のブロック内のサンプルセットと前記共通の境界との間の距離を決定するように構成されている計算モジュールと、
第3の動き情報が前記サンプルセットに関して保存されるか否かを決定するために、前記距離を閾値と比較するように構成されている比較モジュールであって、前記第3の動き情報は、前記第1の動き情報及び前記第2の動き情報によって導出される、比較モジュールと、
を備え
、
前記距離は、前記幾何学的区分化モードに対応付けられた角度パラメータに従って、予め設定されたルックアップテーブルをチェックすることによって決定される計算パラメータに基づいて計算される、動き情報保存装置。
【請求項26】
前記比較モジュールは、
前記距離の絶対値が前記閾値以下である場合、前記第3の動き情報が前記サンプルセットに関して保存されることを決定する、
ように構成されている、請求項
25に記載の動き情報保存装置。
【請求項27】
前記距離の前記絶対値が前記閾値よりも大きい場合、前記比較モジュールは、
前記距離が正である場合、前記第1の動き情報が前記サンプルセットに関して保存されることを決定する、又は、
前記距離が負である場合、前記第2の動き情報が前記サンプルセットに関して保存されることを決定する、
ようにさらに構成されている、請求項
26に記載の動き情報保存装置。
【請求項28】
前記閾値は予め定められている、請求項
25~
27のいずれか1項に記載の動き情報保存装置。
【請求項29】
前記閾値は、前記共通の境界と水平方向又は垂直方向との間の幾何学的関係に基づく、請求項
25~
28のいずれか1項に記載の動き情報保存装置。
【請求項30】
前記閾値は、前記共通の境界の直交方向と、前記水平方向又は前記垂直方向との間の角度に基づく、請求項
29に記載の動き情報保存装置。
【請求項31】
前記閾値は、前記現在のブロックの幅及び/又は高さに基づく、請求項
25~
30のいずれか1項に記載の動き情報保存装置。
【請求項32】
前記共通の境界は、
前記角度パラメータ及び距離パラメータによって決定され、前記計算モジュールは、
前記角度パラメータ及び前記距離パラメータを決定する、
ようにさらに構成されている、請求項
25~
31のいずれか1項に記載の動き情報保存装置。
【請求項33】
デコーダでは、前記計算モジュールは、
ビットストリームから前記角度パラメータ及び前記距離パラメータをパースする、又は、
前記ビットストリームからインジケータをパースし、
前記インジケータに基づいて前記角度パラメータ及び前記距離パラメータを取得する、
ようにさらに構成されている、請求項
32に記載の動き情報保存装置。
【請求項34】
前記計算パラメータは、第1の計算パラメータ、第2の計算パラメータ、および、第3の計算パラメータを含み、
前記計算モジュールは、
前記角度パラメータに基づいて
前記第1の計算パラメータを決定し、
前記角度パラメータに基づいてtemp角度パラメータを計算し、
前記temp角度パラメータに基づいて
前記第2の計算パラメータを決定し、
前記角度パラメータ及び前記距離パラメータに基づいて
前記第3の計算パラメータを計算する、
ようにさらに構成されている、請求項
32又は
33に記載の動き情報保存装置。
【請求項35】
前記第1の計算パラメータは、前記角度パラメータに従って、
前記ルックアップテーブルをチェックすることによって決定され、前記第2の計算パラメータは、前記temp角度パラメータに従って、前記ルックアップテーブルをチェックすることによって決定され、前記第1の計算パラメータ及び前記第2の計算パラメータは、それぞれ、同じ角度のコサイン値及びサイン値である、請求項
34に記載の動き情報保存装置。
【請求項36】
前記距離は、以下によって計算され、
distFromLine=(x+K)*P1+(y+K)*P2-P3
P1、P2、及びP3は、それぞれ、前記第1の計算パラメータ、前記第2の計算パラメータ、及び前記第3の計算パラメータであり、distFromLineは、前記距離を表し、Kは、非負の整数であり、xは、前記サンプルセットにおけるターゲット位置の水平座標を表し、yは、矩形座標系における前記ターゲット位置の垂直座標を表し、前記現在のブロックの左上サンプルの位置は、座標原点として設定され、右方向は、正の水平方向として設定され、下方向は、正の垂直方向として設定される、請求項
34又は
35に記載の動き情報保存装置。
【請求項37】
Kは1に等しい、請求項
36に記載の動き情報保存装置。
【請求項38】
前記ターゲット位置は、前記サンプルセットにおいて予め定められている、請求項
36又は
37に記載の動き情報保存装置。
【請求項39】
前記予め定められた位置は、前記サンプルセットの左上位置である、又は、前記サンプルセットの中心位置である、請求項
38に記載の動き情報保存装置。
【請求項40】
前記距離のサンプル精度は、整数サンプルよりも高く、
対応して、前記距離は、以下によって計算され、
distFromLine=((x<<N)+K)*P1+((y<<N)+K)*P2-P3
2Nは、前記距離の前記サンプル精度の逆数を表す、請求項
36~
39のいずれか1項に記載の動き情報保存装置。
【請求項41】
Nは1に等しい、請求項
40に記載の動き情報保存装置。
【請求項42】
前記サンプルセットは、前記現在のブロックのルマサンプルセットである、請求項
25~
41のいずれか1項に記載の動き情報保存装置。
【請求項43】
前記動き情報保存装置は、
前記現在のブロックを複数のサンプルセットに分割し、前記複数のサンプルセットのそれぞれが前記サンプルセットと同じサイズを有する、又は、
前記現在のブロックを前記サンプルセットとして設定する、
ように構成されている分割モジュールをさらに備える、請求項
25~
42のいずれか1項に記載の動き情報保存装置。
【請求項44】
前記サンプルセットは4×4サンプルアレイである、請求項
25~
43のいずれか1項に記載の動き情報保存装置。
【請求項45】
前記複数のサンプルセットのそれぞれは、各動き情報保存ユニットに対応し、前記動き情報保存ユニットは、前記第1の動き情報、前記第2の動き情報、及び前記第3の動き情報のうちの1つを保存するために使用される、請求項
43に記載の動き情報保存装置。
【請求項46】
前記第1のサブブロック及び前記第2のサブブロックは、三角形区分、非対称矩形区分、又は台形区分である、請求項
25~
45のいずれか1項に記載の動き情報保存装置。
【請求項47】
前記第1の動き情報は、第1の参照ピクチャリストに基づく動き情報を含み、前記第2の動き情報は、第2の参照ピクチャリストに基づく動き情報を含み、前記第3の動き情報は、前記第1の動き情報及び前記第2の動き情報を含む、請求項
25~
46のいずれか1項に記載の動き情報保存装置。
【請求項48】
前記第3の動き情報は、予め設定されたフィルタ重みルックアップテーブルに基づいて、前記第1の動き情報及び前記第2の動き情報によって導出される、請求項25~47のいずれか一項に記載の動き情報保存装置。
【請求項49】
プロセッサとメモリとを備える、ビデオストリームをデコードする装置であって、前記メモリは、前記プロセッサに請求項1~
24のいずれか1項に記載の動き情報保存方法を実行させる命令を記憶している、装置。
【請求項50】
プロセッサとメモリとを備える、ビデオストリームをエンコードする装置であって、前記メモリは、前記プロセッサに請求項1~
24のいずれか1項に記載の動き情報保存方法を実行させる命令を記憶している、装置。
【請求項51】
実行されると、1又は複数のプロセッサがビデオデータをコードするように構成されているようにする命令を記憶したコンピュータ可読記憶媒体であって、前記命令は、前記1又は複数のプロセッサに請求項1~
24のいずれか1項に記載の動き情報保存方法を実行させる、コンピュータ可読記憶媒体。
【請求項52】
コンピュータ上で実行されると、請求項1~
24のいずれか1項に記載の動き情報保存方法を実行するプログラムコードを備える、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願の実施形態は、概して、ビデオコーディングの分野に関し、より具体的には、インター予測に関する。
【背景技術】
【0002】
ビデオコーディング(ビデオエンコーディング及びデコーディング)は、例えば、ブロードキャストデジタルTV、インターネット及びモバイルネットワークを介したビデオ送信、ビデオチャット、ビデオ会議、DVD及びブルーレイディスク、ビデオコンテンツの取得及び編集システム、セキュリティアプリケーションのカムコーダー等のリアルタイム会話アプリケーションといった、幅広いデジタルビデオアプリケーションにおいて使用される。
【0003】
比較的短いビデオを描画するためであっても、必要とされるビデオデータの量は、かなりのものであり得、その結果、限定された帯域幅容量を有する通信ネットワークを介してデータがストリームされる又は別の方法で通信されることになる場合、困難が生じる場合がある。したがって、ビデオデータは、一般に、現代の遠隔通信ネットワークを介して通信される前に圧縮される。メモリリソースが限定的であり得るので、ビデオのサイズは、ビデオがストレージデバイスに保存される場合にも問題となり得る。ビデオ圧縮デバイスは、しばしば、ソースにおけるソフトウェア及び/又はハードウェアを用いて、送信又は保存の前にビデオデータをコードし、それによりデジタルビデオイメージを表現するのに必要なデータの量を低減させる。その後、圧縮データは、デスティネーションにおいて、ビデオデータをデコードするビデオ解凍デバイスによって受信される。限定されたネットワークリソース及び増大し続けるより高いビデオ品質の需要に鑑みて、ピクチャ品質をほとんど又は全く犠牲にせずに圧縮比を改善する、改善された圧縮及び解凍技術が望まれている。
【発明の概要】
【0004】
本願の実施形態は、独立請求項に記載のエンコーディング及びデコーディングのための装置及び方法を提供する。
【0005】
上述の目的及び他の目的が独立請求項の主題により達成される。従属請求項、明細書及び図面から、さらなる実装形態が明らかになる。
【0006】
本願の第1の態様によれば、動き情報保存方法であって、現在のブロックが第1のサブブロック及び第2のサブブロックからなり、上記第1のサブブロック及び上記第2のサブブロックは、共通の境界によって分離され、上記第1のサブブロックは、第1の動き情報に対応し、上記第2のサブブロックは、第2の動き情報に対応し、上記方法は、上記現在のブロック内のサンプルセットと上記共通の境界との間の距離を決定する段階と、第3の動き情報が上記サンプルセットに関して保存されるか否かを決定するために、上記距離を閾値と比較する段階であって、上記第3の動き情報は、上記第1の動き情報及び上記第2の動き情報によって導出される、比較する段階と、を備える、動き情報保存方法が開示される。
【0007】
実現可能な実装において、上記第3の動き情報が上記サンプルセットに関して保存されるか否かを決定するために、上記距離を閾値と比較する段階は、上記距離の絶対値が上記閾値以下である場合、上記第3の動き情報が上記サンプルセットに関して保存されることを決定する段階、を含む。
【0008】
実現可能な実装において、上記距離の上記絶対値が上記閾値よりも大きい場合、上記方法は、上記距離が正である場合、上記第1の動き情報が上記サンプルセットに関して保存されることを決定する段階、又は、上記距離が負である場合、上記第2の動き情報が上記サンプルセットに関して保存されることを決定する段階、をさらに備える。
【0009】
実現可能な実装において、閾値は予め定められている。
【0010】
実現可能な実装において、上記閾値は、上記共通の境界と水平方向又は垂直方向との間の幾何学的関係に基づく。
【0011】
実現可能な実装において、上記閾値は、上記共通の境界の直交方向と、上記水平方向又は上記垂直方向との間の角度に基づく。
【0012】
実現可能な実装において、閾値は、現在のブロックの幅及び/又は高さに基づく。
【0013】
実現可能な実装において、上記共通の境界は、角度パラメータ及び距離パラメータによって決定され、上記現在のブロック内の上記サンプルセットと上記共通の境界との間の上記距離を決定する前に、上記方法は、上記角度パラメータ及び上記距離パラメータを決定する段階、をさらに備える。
【0014】
実現可能な実装において、デコーダでは、上記角度パラメータ及び上記距離パラメータを決定する段階は、ビットストリームから上記角度パラメータ及び上記距離パラメータをパースする段階、又は、上記ビットストリームからインジケータをパースする段階と、上記インジケータに基づいて上記角度パラメータ及び上記距離パラメータを取得する段階と、を含む。
【0015】
実現可能な実装において、上記角度パラメータ及び上記距離パラメータを決定する段階の後に、上記方法は、上記角度パラメータに基づいて第1の計算パラメータを決定する段階と、上記角度パラメータに基づいてtemp角度パラメータを計算する段階と、上記temp角度パラメータに基づいて第2の計算パラメータを決定する段階と、上記角度パラメータ及び上記距離パラメータに基づいて第3の計算パラメータを計算する段階と、をさらに備える。
【0016】
実現可能な実装において、上記第1の計算パラメータは、上記角度パラメータに従って予め設定されたルックアップテーブルをチェックすることによって決定され、上記第2の計算パラメータは、上記temp角度パラメータに従ってルックアップテーブルをチェックすることによって決定され、上記第1の計算パラメータ及び上記第2の計算パラメータは、それぞれ、同じ角度のコサイン値及びサイン値である。
【0017】
実現可能な実装において、上記距離は、以下によって計算され、
distFromLine=(x+K)*P1+(y+K)*P2-P3
P1、P2、及びP3は、それぞれ、上記第1の計算パラメータ、上記第2の計算パラメータ、及び上記第3の計算パラメータであり、distFromLineは、上記距離を表し、Kは、非負の整数であり、xは、上記サンプルセットにおけるターゲット位置の水平座標を表し、yは、矩形座標系における上記ターゲット位置の垂直座標を表し、上記現在のブロックの左上サンプルの位置は、座標原点として設定され、右方向は、正の水平方向として設定され、下方向は、正の垂直方向として設定される。
【0018】
実現可能な実装において、Kは1に等しい。
【0019】
実現可能な実装において、上記ターゲット位置は、上記サンプルセットにおいて予め定められている。
【0020】
実現可能な実装において、上記予め定められた位置は、上記サンプルセットの左上位置又は上記サンプルセットの中心位置である。
【0021】
実現可能な実装において、上記距離のサンプル精度は、整数サンプルよりも高く、
対応して、上記距離は、以下によって計算され、
distFromLine=((x<<N)+K)*P1+((y<<N)+K)*P2-P3
2Nは、上記距離の上記サンプル精度の逆数を表す。
【0022】
実現可能な実装において、Nは1に等しい。
【0023】
実現可能な実装において、上記サンプルセットは、上記現在のブロックのルマサンプルセットである。
【0024】
実現可能な実装において、上記現在のブロック内の上記サンプルセットと上記共通の境界との間の上記距離を決定する前に、上記方法は、上記現在のブロックを複数のサンプルセットに分割する段階であって、上記複数のサンプルセットのそれぞれが上記サンプルセットと同じサイズを有する、分割する段階、又は、上記現在のブロックを上記サンプルセットとして設定する段階、をさらに備える。
【0025】
実現可能な実装において、上記サンプルセットは、4×4サンプルアレイである。
【0026】
実現可能な実装において、上記複数のサンプルセットのそれぞれは、各動き情報保存ユニットに対応し、上記動き情報保存ユニットは、上記第1の動き情報、上記第2の動き情報、及び上記第3の動き情報のうちの1つを保存するために使用される。
【0027】
実現可能な実装において、上記第1のサブブロック及び上記第2のサブブロックは、三角形区分、台形区分、又は非対称矩形区分である。
【0028】
実現可能な実装において、上記第1の動き情報は、第1の参照ピクチャリストに基づく動き情報を含み、上記第2の動き情報は、第2の参照ピクチャリストに基づく動き情報を含み、上記第3の動き情報は、上記第1の動き情報及び上記第2の動き情報を含む。
【0029】
本願の第2の態様によれば、プロセッサとメモリとを備える、ビデオストリームをデコードするための装置が開示される。メモリは、第1の態様による方法をプロセッサに実行させる命令を記憶している。
【0030】
本願の第3の態様によれば、プロセッサとメモリとを備える、ビデオストリームをエンコードするための装置が開示される。メモリは、第1の態様による方法をプロセッサに実行させる命令を記憶している。
【0031】
第4の態様によれば、実行されると、1又は複数のプロセッサにビデオデータをコードさせるように構成されている命令を記憶したコンピュータ可読記憶媒体が提案される。命令は、1又は複数のプロセッサに、第1の態様による方法を実行させる。
【0032】
第5の態様によれば、コンピュータ上で実行されると、第1の態様による方法を実行するプログラムコードを備える、コンピュータプログラム。
【0033】
1又は複数の実施形態の詳細は、添付図面及び以下の説明に記載されている。他の特徴、目的、及び利点は、明細書、図面、及び特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【0034】
以下、添付の図及び図面を参照して、本願の実施形態がより詳細に説明される。
【
図1A】本願の実施形態を実装するように構成されているビデオコーディングシステムの一例を示すブロック図である。
【
図1B】本願の実施形態を実装するように構成されているビデオコーディングシステムの別の例を示すブロック図である。
【
図2】本願の実施形態を実装するように構成されているビデオエンコーダの一例を示すブロック図である。
【
図3】本願の実施形態を実装するように構成されているビデオデコーダの例示的な構造を示すブロック図である。
【
図4】エンコーディング装置又はデコーディング装置の一例を示すブロック図である。
【
図5】エンコーディング装置又はデコーディング装置の別の例を示すブロック図である。
【
図6】空間マージ候補の位置の一例を示す図である。
【
図7】空間マージ候補の冗長チェックについて考慮される候補ペアの一例を示す図である。
【
図8】時間的マージ候補についての動きベクトルスケーリングの一例を示す図である。
【
図9】8×8のサイズのルマサンプルの予測ブロックのための動きベクトル保存の一例を示す図である。
【
図10】三角形区分ベースのインター予測の一例を示す図である。
【
図11】三角形区分モードのための片予測MV選択の一例を示す図である。
【
図12】ブレンディング処理において使用される重みの一例を示す図である。
【
図13】三角形区分モードのための動きベクトル保存の一例を示す図である。
【
図15】GEO区分化パラメータの一例を示す図である。
【
図16】ブレンディング演算の一例を示す図である。
【
図17】ブレンディング演算のためのルックアップテーブルの一例を示す図である。
【
図18】整数位置及び半画素位置を伴う4×4動き保存例の一例を示す図である。
【
図20】動き情報保存方法の一例を示すブロック図である。
【
図21】動き情報保存装置の一例を示すブロック図である。
【
図22】コンテンツ配信サービスを実現するコンテンツ供給システム3100の例示的な構造を示すブロック図である。
【
図23】端末デバイスの一例の構造を示すブロック図である。
【0035】
以下、別途明示的に指定されていない限り、同一の参照符号は、同一又は少なくとも機能的に等価な特徴部を指す。
【発明を実施するための形態】
【0036】
以下の説明では、本開示の一部をなし、本願の実施形態の具体的態様又は本願の実施形態が使用され得る具体的態様を例として示す、添付図面が参照される。本願の実施形態は他の態様において使用されてもよく、図に示されない構造的又は論理的変更を含んでもよいことが理解される。したがって、以下の詳細な説明は、限定的な意味で解釈されず、本願の範囲は、添付の特許請求の範囲によって規定される。
【0037】
例えば、記載されている方法に関連する開示が、この方法を実行するように構成されている対応するデバイス又はシステムについても適用され得ること、及び、その逆もまた同様であることが理解される。例えば、特定の方法ステップのうちの1又は複数が説明される場合、対応するデバイスは、説明された1又は複数の方法ステップ(例えば、上記1もしくは複数のステップを実行する1つのユニット、又は、それぞれ複数のステップのうちの1もしくは複数を実行する複数のユニット)を実行するために、1又は複数のユニットが明示的に説明も又は図面に示しもされていない場合であっても、そのような1又は複数のユニット、例えば、機能ユニットを含んでよい。他方で、例えば、特定の装置が1又は複数のユニット、例えば機能ユニットに基づいて説明される場合、対応する方法は、上記1又は複数のユニットの機能を実行するために、1又は複数のステップが明示的に説明も又は図面に示しもされていない場合であっても、そのような1つのステップ(例えば、1もしくは複数のユニットの機能を実行する1つのステップ、又はそれぞれ複数のユニットのうちの1もしくは複数の機能を実行する複数のステップ)を含んでよい。さらに、別途特に注記されない限り、本明細書で説明する様々な例示的な実施形態及び/又は態様の特徴が互いに組み合わされ得ることが理解される。
【0038】
ビデオコーディングは典型的には、ビデオ又はビデオシーケンスを形成する一連のピクチャの処理を指す。「ピクチャ」という用語の代わりに、「フレーム」又は「イメージ」という用語がビデオコーディングの分野での同義語として用いられる場合がある。ビデオコーディング(又は一般にコーディング)は、ビデオエンコーディング及びビデオデコーディングの2つの部分を含む。ビデオエンコーディングは、ソース側で実行され、典型的には、(より効率的な保存及び/又は送信のために)ビデオピクチャを表現するために要求されるデータ量を低減させるように、元のビデオピクチャを処理(例えば、圧縮による)することを含む。ビデオデコーディングは、デスティネーション側で実行され、典型的には、ビデオピクチャを再構築するように、エンコーダと比較して逆の処理を含む。ビデオピクチャ(又は一般にピクチャ)の「コーディング」に言及する実施形態は、ビデオピクチャ又はそれぞれのビデオシーケンスの「エンコーディング」又は「デコーディング」に関すると理解されるものとする。エンコーディング部分とデコーディング部分との組み合わせは、コーデック(コーディング及びデコーディング)とも称される。
【0039】
ロスレスビデオコーディングの場合、元のビデオピクチャを再構築でき、すなわち、再構築されたビデオピクチャは元のビデオピクチャと同じ品質である(保存中又は送信中に伝送損失又はその他のデータ損失がないと仮定)。ロッシービデオコーディングの場合、ビデオピクチャを表現するデータ量を低減するために、例えば量子化によるさらなる圧縮が実行されるが、これはデコーダにおいて完全には再構築できない。すなわち、再構築されたビデオピクチャの品質は、元のビデオピクチャの品質に比較して低下又は劣化する。
【0040】
いくつかのビデオコーディング規格は、「ロッシーハイブリッドビデオコーデック」のグループに属する(すなわち、サンプル領域における空間的及び時間的予測と、変換領域における量子化を適用するための2D変換コーディングとを組み合わせる)。ビデオシーケンスの各ピクチャは、典型的には、非重複ブロックのセットへと区分化され、コーディングは、典型的には、ブロックレベルで実行される。換言すれば、エンコーダにおいて、ビデオは、例えば、空間的(ピクチャ内)予測及び/又は時間的(ピクチャ間)予測を使用して予測ブロックを生成し、現在のブロック(現在処理されている/処理されることになるブロック)から予測ブロックを減算して残差ブロックを取得し、残差ブロックを変換するとともに変換領域における残差ブロックを量子化して、送信されることになるデータ量を低減(圧縮)することによって、典型的にはブロック(ビデオブロック)レベルで処理され、すなわちエンコードされ、一方で、デコーダにおいて、現在のブロックを表現のために再構築するために、エンコーダと比較して逆の処理がエンコード又は圧縮されたブロックに適用される。さらに、エンコーダがデコーダ処理ループを繰り返すことにより、後続のブロックの処理のために、すなわちコーディングのために、両方が同一の予測(例えば、イントラ及びインター予測)及び/又は再構築物を生成することになる。
【0041】
以下、ビデオコーディングシステム10、ビデオエンコーダ20、及びビデオデコーダ30の実施形態が、
図1A~
図3に基づいて説明される。
【0042】
図1Aは、本願の技術を使用し得る例示的なコーディングシステム10、例えばビデオコーディングシステム10(又は略してコーディングシステム10)を示す概略ブロック図である。ビデオコーディングシステム10のビデオエンコーダ20(又は略してエンコーダ20)及びビデオデコーダ30(又は略してデコーダ30)は、本願において説明される様々な例に従って技術を実行するように構成され得るデバイスの例を表す。
【0043】
図1Aに示すように、コーディングシステム10は、エンコードされたピクチャデータ21を、例えば、このエンコードされたピクチャデータ13をデコードするためにデスティネーションデバイス14に提供するように構成されているソースデバイス12を備える。
【0044】
ソースデバイス12は、エンコーダ20を備え、加えて、すなわち任意選択で、ピクチャソース16と、プリプロセッサ(又は前処理ユニット)18と、例えばピクチャプリプロセッサ18と、通信インタフェース又は通信ユニット22とを備えてよい。
【0045】
ピクチャソース16は、任意の種類のピクチャ撮影デバイス、例えば、現実世界のピクチャを撮影するカメラ、及び/又は、任意の種類のピクチャ生成デバイス、例えば、コンピュータアニメーション化ピクチャを生成するコンピュータグラフィックスプロセッサ、又は、現実世界のピクチャ、コンピュータ生成ピクチャ(例えば、スクリーンコンテンツ、仮想現実(VR)ピクチャ)、及び/又はそれらの任意の組み合わせ(例えば、拡張現実(AR)ピクチャ)を取得及び/又は提供する任意の種類の他のデバイスを含むか又はそれらのデバイスであってよい。ピクチャソースは、上述のピクチャの任意のものを保存する任意の種類のメモリ又はストレージであってよい。
【0046】
プリプロセッサ18と、前処理ユニット18によって実行される処理と区別するように、ピクチャ又はピクチャデータ17は、生ピクチャ又は生ピクチャデータ17とも称され得る。
【0047】
プリプロセッサ18は、(生)ピクチャデータ17を受信するとともに、ピクチャデータ17に対して前処理を実行して、前処理されたピクチャ19又は前処理されたピクチャデータ19を取得するように構成されている。プリプロセッサ18によって実行される前処理は、例えば、トリミング、カラーフォーマットコンバージョン(例えば、RGBからYCbCr)、色補正、又はノイズ除去を含んでよい。前処理ユニット18は任意選択のコンポーネントでもよいことが理解され得る。
【0048】
ビデオエンコーダ20は、前処理されたピクチャデータ19を受信するとともに、エンコードされたピクチャデータ21を提供するように構成されている(さらなる詳細は、例えば
図2に基づいて下記で説明される)。
【0049】
ソースデバイス12の通信インタフェース22は、通信チャネル13を介して、エンコードされたピクチャデータ21を受信するとともに、エンコードされたピクチャデータ21(又はその任意のさらなる処理バージョン)を、保存又は直接の再構築のために、別のデバイス、例えばデスティネーションデバイス14又は任意の他のデバイスに送信するように構成されてよい。
【0050】
デスティネーションデバイス14は、デコーダ30(例えばビデオデコーダ30)を備え、加えて、すなわち任意選択で、通信インタフェース又は通信ユニット28と、ポストプロセッサ32(又は後処理ユニット32)と、ディスプレイデバイス34とを備えてよい。
【0051】
デスティネーションデバイス14の通信インタフェース28は、エンコードされたピクチャデータ21(又はその任意のさらなる処理バージョン)を、例えばソースデバイス12から直接又は任意の他のソース、例えばストレージデバイス、例えばエンコードされたピクチャデータストレージデバイスから受信するとともに、エンコードされたピクチャデータ21をデコーダ30に提供するように構成されている。
【0052】
通信インタフェース22及び通信インタフェース28は、ソースデバイス12とデスティネーションデバイス14との間で、直接通信リンク、例えば、直接的な有線もしくは無線接続を介して、又は、任意の種類のネットワーク、例えば、有線もしくは無線ネットワークもしくはそれらの任意の組み合わせ、もしくは、任意の種類のプライベート及びパブリックネットワークもしくはそれらの任意の種類の組み合わせを介して、エンコードされたピクチャデータ21又はエンコードされたデータ13を送信又は受信するように構成されてよい。
【0053】
通信インタフェース22は、例えば、エンコードされたピクチャデータ21を適切なフォーマットに、例えばパケットにパッケージ化する、及び/又は、通信リンク又は通信ネットワークを介した送信のための任意の種類の送信エンコーディング又は処理を用いて、エンコードされたピクチャデータを処理するように構成されてよい。
【0054】
通信インタフェース22のカウンターパートをなす通信インタフェース28は、例えば、送信されたデータを受信するとともに、任意の種類の対応する送信デコーディング又は処理及び/又はデパッケージングを用いて送信データを処理して、エンコードされたピクチャデータ21を取得するように構成されてよい。
【0055】
通信インタフェース22及び通信インタフェース28は両方とも、
図1Aにおいてソースデバイス12からデスティネーションデバイス14に向く通信チャネル13の矢印で示すように単方向通信インタフェースとして、又は、双方向通信インタフェースとして構成されてよく、例えば、メッセージを送信及び受信する、例えば、接続を設定し、通信リンク及び/又はデータ送信、例えばエンコードされたピクチャデータ送信に関連する任意の他の情報を確認及びやりとりするように構成されてよい。
【0056】
デコーダ30は、エンコードされたピクチャデータ21を受信するとともに、デコードされたピクチャデータ31又はデコードされたピクチャ31を提供するように構成されている(さらなる詳細は、例えば
図3又は
図5に基づいて下記で説明される)。
【0057】
デスティネーションデバイス14のポストプロセッサ32は、デコードされたピクチャデータ31(再構築ピクチャデータとも呼ばれる)、例えばデコードされたピクチャ31を後処理して、後処理されたピクチャデータ33、例えば後処理されたピクチャ33を取得するように構成されている。後処理ユニット32により実行される後処理は、例えば、デコードされたピクチャデータ31を、例えば、ディスプレイデバイス34による表示のために準備する目的で、例えば、カラーフォーマットコンバージョン(例えば、YCbCrからRGBへ)、色補正、トリミング、もしくは再サンプリング、又は任意の他の処理を含んでよい。
【0058】
デスティネーションデバイス14のディスプレイデバイス34は、ピクチャを例えばユーザ又は閲覧者に表示するために、後処理されたピクチャデータ33を受信するように構成されている。ディスプレイデバイス34は、再構築ピクチャを表現するための任意の種類のディスプレイ、例えば、一体型又は外付けのディスプレイ又はモニタであってもよく、これを含んでもよい。ディスプレイは、例えば、液晶ディスプレイ(LCD)、有機発光ダイオード(OLED)ディスプレイ、プラズマディスプレイ、プロジェクタ、マイクロLEDディスプレイ、液晶オンシリコン(LCoS)、デジタル光プロセッサ(DLP)、又は任意の種類の他のディスプレイを含んでよい。
【0059】
図1Aはソースデバイス12とデスティネーションデバイス14とを別個のデバイスとして示しているが、デバイスの実施形態は、それらの両方又は両方の機能、すなわち、ソースデバイス12又は対応する機能と、デスティネーションデバイス14又は対応する機能とを備えてもよい。そのような実施形態では、ソースデバイス12又は対応する機能及びデスティネーションデバイス14又は対応する機能は、同じハードウェア及び/又はソフトウェアを使用して、又は別個のハードウェア及び/又はソフトウェア又はそれらの任意の組み合わせによって実装され得る。
【0060】
本説明に基づいて当業者には明らかであるように、
図1Aに示すような、異なるユニットの機能又はソースデバイス12及び/又はデスティネーションデバイス14内の機能の存在及び(正確な)分割は、実際のデバイス及びアプリケーションに応じて変わり得る。
【0061】
エンコーダ20(例えば、ビデオエンコーダ20)又はデコーダ30(例えば、ビデオデコーダ30)又はエンコーダ20及びデコーダ30の両方は、1又は複数のマイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、ディスクリートロジック、ハードウェア、ビデオコーディング専用又はそれらの任意の組み合わせ等の、
図1Bに示すような処理回路を介して実装されてよい。エンコーダ20は、
図2のエンコーダ20及び/又は本明細書に記載の任意の他のエンコーダシステム又はサブシステムに関連して説明される様々なモジュールを具現するために処理回路46を介して実装されてよい。デコーダ30は、
図3のデコーダ30及び/又は本明細書に記載の任意の他のデコーダシステム又はサブシステムに関連して説明される様々なモジュールを具現するために処理回路46を介して実装されてよい。処理回路は、後で説明されるように様々な演算を実行するように構成されてよい。
図5に示すように、本技術がソフトウェアにおいて部分的に実装される場合、デバイスは、好適な非一時的コンピュータ可読記憶媒体にソフトウェアのための命令を保存してよく、ハードウェア内で1又は複数のプロセッサを用いて命令を実行して、本開示の技術を実現してよい。ビデオエンコーダ20及びビデオデコーダ30のいずれかは、
図1Bに示すように、例えば、単一のデバイス内の組み合わされたエンコーダ/デコーダ(コーデック)の一部として統合されてよい。
【0062】
ソースデバイス12及びデスティネーションデバイス14は、任意の種類のハンドヘルド又はステーショナリデバイス、例えば、ノートブック又はラップトップコンピュータ、携帯電話、スマートフォン、タブレット又はタブレットコンピュータ、カメラ、デスクトップコンピュータ、セットトップボックス、テレビ、ディスプレイデバイス、デジタルメディアプレイヤ、ビデオゲーミングコンソール、ビデオストリーミングデバイス(コンテンツサービスサーバ又はコンテンツ配信サーバ等)、ブロードキャスト受信機デバイス、ブロードキャスト送信機デバイス等を含む、広範なデバイスのいずれかを備えてよく、オペレーティングシステムを用いない又は任意の種類のオペレーティングシステムを用いてよい。いくつかの場合、ソースデバイス12及びデスティネーションデバイス14は、無線通信に対応してよい。したがって、ソースデバイス12及びデスティネーションデバイス14は、無線通信デバイスとしてよい。
【0063】
いくつかの場合、
図1Aに示すビデオコーディングシステム10は、単に一例であり、本願の技術は、エンコーディングデバイスとデコーディングデバイスとの間の任意のデータ通信を必ずしも含まないビデオコーディング設定(例えば、ビデオエンコーディング又はビデオデコーディング)に適用されてよい。他の例において、データは、ローカルメモリから取得され、ネットワークを介してストリーム等される。ビデオエンコーディングデバイスは、データをメモリにエンコードして保存してよく、及び/又は、ビデオデコーディングデバイスは、データをメモリから取得するとともにデコードしてよい。いくつかの例において、エンコーディング及びデコーディングは、互いに通信しないが単にデータをメモリにエンコードする及び/又はデータをメモリから取得するとともにデコードするデバイスによって実行される。
【0064】
説明の便宜上、例えば、ITU-Tビデオコーディング専門家グループ(VCEG)及びISO/IEC動画専門家グループ(MPEG)のビデオコーディングに関する共同作業チーム(JCT-VC)によって開発された次世代ビデオコーディング規格である、高効率ビデオコーディング(HEVC)又は多目的ビデオコーディング(VVC)のリファレンスソフトウェアを参照して、本願の実施形態が本明細書で説明される。当業者であれば、本願の実施形態がHEVC又はVVCに限定されるものではないことを理解するであろう。
【0065】
[エンコーダ及びエンコーディング方法]
図2は、本願の技術を実装するように構成されている例示的なビデオエンコーダ20の概略ブロック図を示している。
図2の例において、ビデオエンコーダ20は、入力201(又は入力インタフェース201)と、残差計算ユニット204と、変換処理ユニット206と、量子化ユニット208と、逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、ループフィルタユニット220と、デコードされたピクチャバッファ(DPB)230と、モード選択ユニット260と、エントロピーエンコーディングユニット270と、出力272(又は出力インタフェース272)とを備える。モード選択ユニット260は、インター予測ユニット244と、イントラ予測ユニット254と、区分化ユニット262とを備えてよい。インター予測ユニット244は、動き推定ユニット及び動き補償ユニット(図示せず)を備えてよい。
図2に示されるビデオエンコーダ20は、ハイブリッドビデオエンコーダ、又はハイブリッドビデオコーデックに従うビデオエンコーダとも称され得る。
【0066】
残差計算ユニット204と、変換処理ユニット206と、量子化ユニット208と、モード選択ユニット260とは、エンコーダ20の順方向信号経路を形成するものとして言及されてよく、一方、逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、バッファ216と、ループフィルタ220と、デコードされたピクチャバッファ(DPB)230と、インター予測ユニット244と、イントラ予測ユニット254とは、ビデオエンコーダ20の逆方向信号経路を形成するものとして言及されてよい。ビデオエンコーダ20の逆方向信号経路は、デコーダの信号経路に対応する(
図3のビデオデコーダ30を参照)。逆量子化ユニット210と、逆変換処理ユニット212と、再構築ユニット214と、ループフィルタ220と、デコードされたピクチャバッファ(DPB)230と、インター予測ユニット244と、イントラ予測ユニット254とは、ビデオエンコーダ20の「内蔵デコーダ」を形成するものとも言及される。
【0067】
[ピクチャ及びピクチャ区分化(ピクチャ及びブロック)]
エンコーダ20は、例えば、入力201を介して、ピクチャ17(又はピクチャデータ17)、例えば、ビデオ又はビデオシーケンスを形成する一連のピクチャのうちのピクチャを受信するように構成されてよい。受信されたピクチャ又はピクチャデータは、前処理されたピクチャ19(又は前処理されたピクチャデータ19)であってもよい。簡潔さのために、以下の説明ではピクチャ17が参照される。ピクチャ17は、現在のピクチャ又はコードされることになるピクチャとも称され得る(特に、ビデオコーディングにおいて、現在のピクチャを他のピクチャ、例えば、同じビデオシーケンス、すなわち現在のピクチャも含むビデオシーケンスの、以前にエンコードされた及び/又はデコードされたピクチャから区別するために)。
【0068】
(デジタル)ピクチャは、強度値を伴うサンプルの二次元アレイ又はマトリックスであるか、それとみなされ得る。アレイ内のサンプルは、画素(ピクチャ要素の略称)又はペルとも称され得る。アレイ又はピクチャの水平及び垂直方向(又は軸)のサンプル数は、ピクチャのサイズ及び/又は解像度を定義する。色を表現するために、典型的には3つの色成分が使用され、すなわち、ピクチャは、3つのサンプルアレイで表されても又はこれを含んでもよい。RBGフォーマット又は色空間では、ピクチャは対応する赤、緑、及び青のサンプルアレイを含む。しかしながら、ビデオコーディングでは、各画素は、典型的には輝度及びクロミナンスフォーマット又は色空間、例えばYCbCrで表され、これには、Y(代わりにLが用いられる場合もある)で示される輝度成分と、Cb及びCrで示される2つのクロミナンス成分とが含まれる。輝度(又は略してルマ(luma))成分Yは、明るさ又は(例えば、グレースケールピクチャでのような)グレーレベルの強度を表し、2つのクロミナンス(又は略してクロマ(chroma))成分であるCb及びCrは、色度又は色情報成分を表す。したがって、YCbCrフォーマットのピクチャは、輝度サンプル値(Y)の輝度サンプルアレイと、クロミナンス値(Cb及びCr)の2つのクロミナンスサンプルアレイとを含む。RGBフォーマットのピクチャは、YCbCrフォーマットにコンバート又は変換され得、その逆もまた同様であり、この処理は、色変換又はコンバージョンとしても知られている。ピクチャがモノクロの場合、ピクチャは輝度サンプルアレイのみを含んでよい。したがって、ピクチャは、例えば、モノクロフォーマットにおけるルマサンプルのアレイ、又は、4:2:0、4:2:2、及び4:4:4のカラーフォーマットにおけるルマサンプルのアレイ及びクロマサンプルの2つの対応するアレイであってよい。
【0069】
ビデオエンコーダ20の実施形態は、ピクチャ17を複数の(典型的には非重複)ピクチャブロック203に区分化するように構成されているピクチャ区分化ユニット(
図2には示されない)を備えてよい。これらのブロックは、ルートブロック、マクロブロック(H.264/AVC)又はコーディングツリーブロック(CTB)又はコーディングツリーユニット(CTU)(H.265/HEVC及びVVC)とも称され得る。ピクチャ区分化ユニットは、ビデオシーケンスの全てのピクチャ及びブロックサイズを定義する対応するグリッドに同じブロックサイズを使用するか、又は、ピクチャ又はピクチャのサブセットもしくはグループ間でブロックサイズを変化させて、各ピクチャを対応するブロックに区分化するように構成されてよい。
【0070】
さらなる実施形態において、ビデオエンコーダは、ピクチャ17のブロック203、例えば、ピクチャ17を形成する1つ、いくつか、又は全てのブロックを直接受信するように構成されてよい。ピクチャブロック203は、現在のピクチャブロック又はコードされることになるピクチャブロックとも称され得る。
【0071】
ピクチャ17と同様に、ここでも、ピクチャブロック203は、ピクチャ17よりも寸法が小さいが、強度値(サンプル値)を伴うサンプルの二次元アレイ又はマトリックスであるか、又は、それとみなすことができる。換言すれば、ブロック203は、例えば、1つのサンプルアレイ(例えば、モノクロピクチャ17の場合はルマアレイ、又は、カラーピクチャの場合はルマもしくはクロマアレイ)、又は3つのサンプルアレイ(例えば、カラーピクチャ17の場合はルマ及び2つのクロマアレイ)、又は、適用されるカラーフォーマットに応じた任意の他の数及び/又は種類のアレイを備えてよい。ブロック203の水平及び垂直方向(又は軸)のサンプル数は、ブロック203のサイズを定義する。したがって、ブロックは、例えば、サンプルのM×N(M列×N行)アレイ、又は変換係数のM×Nアレイであってよい。
【0072】
図2に示すビデオエンコーダ20の実施形態は、ピクチャ17をブロック毎にエンコードするように構成されてよく、例えば、エンコーディング及び予測がブロック203毎に実行される。
【0073】
図2に示されるビデオエンコーダ20の実施形態は、スライス(ビデオスライスとも称される)を使用することによってピクチャを区分化及び/又はエンコードするようにさらに構成されてよく、ピクチャは、1又は複数のスライス(典型的には非重複)を使用して区分化又はエンコードされてよく、各スライスは、1もしくは複数のブロック(例えばCTU)、又は、ブロックの1もしくは複数のグループ(例えば、タイル(H.265/HEVC及びVVC)又はブリック(VVC)を含んでよい。
【0074】
図2に示されるビデオエンコーダ20の実施形態は、スライス/タイルグループ(ビデオタイルグループとも称される)及び/又はタイル(ビデオタイルとも称される)を使用することによってピクチャを区分化及び/又はエンコードするようにさらに構成されてよく、ピクチャは、1又は複数のスライス/タイルグループ(典型的には非重複)を使用して区分化又はエンコードされてよく、各スライス/タイルグループは、例えば、1もしくは複数のブロック(例えばCTU)又は1もしくは複数のタイルを含んでよく、各タイルは例えば、矩形であってよく、1又は複数のブロック(例えば、CTU)、例えば完全又は部分的ブロックを含んでよい。
【0075】
[残差計算]
残差計算ユニット204は、例えば、サンプル毎(画素毎)にピクチャブロック203のサンプル値から予測ブロック265のサンプル値を減算し、サンプル領域における残差ブロック205を取得することによって、ピクチャブロック203及び予測ブロック265に基づいて(予測ブロック265に関するさらなる詳細は後で提供される)、残差ブロック205(残差205とも称される)を計算するように構成されてよい。
【0076】
[変換]
変換処理ユニット206は、残差ブロック205のサンプル値に対して変換、例えば、離散コサイン変換(DCT)又は離散サイン変換(DST)を適用し、変換領域における変換係数207を取得するように構成されてよい。変換係数207は、変換残差係数とも称されてよく、変換領域における残差ブロック205を表す。
【0077】
変換処理ユニット206は、H.265/HEVCに関して指定された変換等のDCT/DSTの整数近似を適用するように構成されてよい。直交DCT変換に比較して、そのような整数近似は、典型的には特定の係数によってスケーリングされる。順変換及び逆変換によって処理される残差ブロックのノルムを保持するために、変換処理の一部として追加のスケーリング係数が適用される。スケーリング係数は、典型的には、シフト演算に関して2のべき乗であるスケーリング係数、変換係数のビット深度、確度と実装コストとの間のトレードオフ等のような特定の制約に基づいて選択される。例えば、特定のスケーリング係数が、例えば、逆変換処理ユニット212による逆変換(及び、例えばビデオデコーダ30における逆変換処理ユニット312による対応する逆変換)について指定され、例えば、エンコーダ20における変換処理ユニット206による順方向変換のための対応するスケーリング係数が、相応に指定されてよい。
【0078】
ビデオエンコーダ20の実施形態は(それぞれ変換処理ユニット206)は、変換パラメータ、例えば単数又は複数の変換のタイプを、例えば、直接又はエントロピーエンコーディングユニット270を介してエンコードもしくは圧縮してから出力するように構成されてよく、それにより、例えば、ビデオデコーダ30は、デコーディングのための変換パラメータを受信して使用してよい。
【0079】
[量子化]
量子化ユニット208は、例えば、スカラ量子化又はベクトル量子化を適用することによって、変換係数207を量子化して、量子化係数209を取得するように構成されてよい。量子化係数209は、量子化変換係数209又は量子化残差係数209とも称され得る。
【0080】
量子化処理は、変換係数207のいくつか又は全てに関連付けられたビット深度を減少させ得る。例えば、nビット変換係数は、量子化中にmビット変換係数に丸められてよく、ここでnはmよりも大きい。量子化の程度は、量子化パラメータ(QP)を調整することによって変更されてよい。例えば、スカラ量子化の場合、より細かい又はより粗い量子化を達成するために、異なるスケーリングが適用されてよい。量子化ステップサイズが小さいほど細かい量子化に対応し、一方で、量子化ステップサイズが大きいほど粗い量子化に対応する。適用可能な量子化ステップサイズは、量子化パラメータ(QP)によって示され得る。量子化パラメータは、例えば、適用可能な量子化ステップサイズの予め定義されたセットへのインデックスであり得る。例えば、小さな量子化パラメータは細かい量子化(小さな量子化ステップサイズ)に対応し得、大きな量子化パラメータは粗い量子化(大きな量子化ステップサイズ)に対応し得るか、又は逆もまた同様である。量子化は、量子化ステップサイズによる除算を含んでよく、例えば逆量子化ユニット210による対応する及び/又は逆量子化解除は、量子化ステップサイズによる乗算を含んでよい。いくつかの規格、例えばHEVCに従った実施形態は、量子化ステップサイズを決定するのに量子化パラメータを使用するように構成されてよい。概して、量子化ステップサイズは、除算を含む方程式の固定小数点近似を使用する量子化パラメータに基づいて算出され得る。残差ブロックのノルムを復元するために、量子化及び量子化解除に追加のスケーリング係数を導入し得、これは、量子化ステップサイズ及び量子化パラメータの方程式の固定小数点近似で使用されるスケーリングに起因して変更され得る。1つの例示的な実装では、逆変換及び量子化解除のスケーリングは組み合わされ得る。代替的には、カスタマイズされた量子化テーブルが使用され、例えばビットストリームにおいてエンコーダからデコーダにシグナリングされてよい。量子化はロッシー演算であり、損失は量子化ステップサイズの増加に伴って増加する。
【0081】
ビデオエンコーダ20の実施形態(それぞれ量子化ユニット208)は、量子化パラメータ(QP)、例えば直接か又はエントロピーエンコーディングユニット270を介してエンコードしてから出力するように構成されてよく、それにより、例えば、ビデオデコーダ30は、デコーディングのための量子化パラメータを受信して適用してよい。
【0082】
[逆量子化]
逆量子化ユニット210は、例えば、量子化ユニット208と同じ量子化ステップサイズに基づいて又はそれを使用して量子化ユニット208によって適用された量子化スキームの逆を適用することによって、量子化係数に対して量子化ユニット208の逆量子化を適用し、量子化解除係数211を取得するように構成されている。量子化解除係数211は、量子化解除残差係数211とも称され得、典型的には量子化による損失に起因して変換係数とは同一でないが、変換係数207に対応する。
【0083】
[逆変換]
逆変換処理ユニット212は、変換処理ユニット206によって適用された変換の逆変換、例えば、逆離散コサイン変換(DCT)又は逆離散サイン変換(DST)又は他の逆変換を適用し、サンプル領域における再構築残差ブロック213(又は対応する量子化解除係数213)を取得するように構成されている。再構築残差ブロック213は、変換ブロック213とも称され得る。
【0084】
[再構築]
再構築ユニット214(例えば、加算器又は合算器214)は、例えば、サンプル毎に、再構築残差ブロック213のサンプル値と予測ブロック265のサンプル値とを加算することによって、変換ブロック213(すなわち、再構築残差ブロック213)を予測ブロック265に加算し、サンプル領域における再構築ブロック215を取得するように構成されている。
【0085】
[フィルタリング]
ループフィルタユニット220(又は略して「ループフィルタ」220)は、再構築ブロック215をフィルタして、フィルタリングされたブロック221を取得する、又は、一般に、再構築サンプルをフィルタして、フィルタリングされたサンプル値を取得するように構成されている。ループフィルタユニットは、例えば、画素遷移を滑らかにする、又は、別様にビデオ品質を改善するように構成されている。ループフィルタユニット220は、デブロッキングフィルタ、サンプル適応型オフセット(SAO)フィルタ、もしくは、1もしくは複数の他のフィルタ、例えば、適応ループフィルタ(ALF)、ノイズ抑制フィルタ(NSF)、又はそれらの任意の組み合わせ等、1又は複数のループフィルタを含み得る。一例において、ループフィルタユニット220はデブロッキングフィルタ、SAOフィルタ、及びALFフィルタを含み得る。フィルタリング処理の順序は、デブロッキングフィルタ、SAO、及びALFであり得る。別の例において、クロマスケーリングを伴うルママッピング(LMCS)(すなわち、適応インループリシェーパ)と呼ばれる処理が追加される。この処理はデブロッキングの前に実行される。別の例において、デブロッキングフィルタ処理はまた、内部サブブロックエッジ、例えば、アフィンサブブロックエッジ、ATMVPサブブロックエッジ、サブブロック変換(SBT)エッジ、及びイントラサブ区分(ISP)エッジに適用され得る。ループフィルタユニット220が、インループフィルタであるものとして
図2に示されているが、他の構成では、ループフィルタユニット220はポストループフィルタとして実装されてもよい。フィルタリングされたブロック221は、フィルタリングされた再構築ブロック221とも称され得る。
【0086】
ビデオエンコーダ20の実施形態(それぞれループフィルタユニット220)は、ループフィルタパラメータを(SAOフィルタパラメータ又はALFフィルタパラメータ又はLMCSパラメータ等)、例えば、直接又はエントロピーエンコーディングユニット270を介してエンコードしてから出力するように構成されてよく、それにより、例えば、デコーダ30は、デコーディングのために同じループフィルタパラメータ又はそれぞれのループフィルタを受信して適用してよい。
【0087】
[デコードされたピクチャバッファ]
デコードされたピクチャバッファ(DPB)230は、ビデオエンコーダ20によってビデオデータをエンコードするための参照ピクチャ、又は一般に参照ピクチャデータを保存するメモリであってよい。DPB230は、シンクロナスDRAM(SDRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM(登録商標))、又は他のタイプのメモリデバイスを含む、ダイナミックランダムアクセスメモリ(DRAM)等の様々なメモリデバイスのうちの任意のものによって形成されてよい。デコードされたピクチャバッファ(DPB)230は、1又は複数のフィルタリングされたブロック221を保存するように構成されてよい。デコードされたピクチャバッファ230は、同じ現在のピクチャ又は異なるピクチャ、例えば、以前に再構築されたピクチャの他の以前にフィルタリングされたブロック、例えば、以前に再構築され且つフィルタリングされたブロック221を保存するようにさらに構成されてよく、例えば、インター予測のために、以前に再構築された、すなわちデコードされた、完全なピクチャ(並びに、対応する参照ブロック及びサンプル)、及び/又は、部分的に再構築された現在のピクチャ(並びに、対応する参照ブロック及びサンプル)を提供してよい。デコードされたピクチャバッファ(DPB)230は、例えば、再構築ブロック215がループフィルタユニット220によってフィルタリングされていない場合、1もしくは複数のフィルタリングされていない再構築ブロック215、もしくは一般に、フィルタリングされていない再構築サンプル、又は、再構築ブロックもしくはサンプルの任意の他のさらに処理されたバージョンを保存するように構成されてもよい。
【0088】
[モード選択(区分化及び予測)]
モード選択ユニット260は、区分化ユニット262と、インター予測ユニット244と、イントラ予測ユニット254とを備え、元のピクチャデータ、例えば元のブロック203(現在のピクチャ17の現在のブロック203)、及び再構築ピクチャデータ、例えば、同じ(現在の)ピクチャの及び/又は1又は複数の以前にデコードされたピクチャからの、例えばデコードされたピクチャバッファ230もしくは他のバッファ(例えば、図示されていないラインバッファ)からのフィルタリングされた及び/又はフィルタリングされていない再構築サンプルもしくはブロックを受信又は取得するように構成されている。再構築ピクチャデータは、予測ブロック265又は予測因子265を取得するために、予測、例えばインター予測又はイントラ予測のための参照ピクチャデータとして使用される。
【0089】
モード選択ユニット260は、現在のブロック予測モード(区分化を含まない)のための区分化及び予測モード(例えば、イントラ又はインター予測モード)を決定又は選択し、対応する予測ブロック265を生成するように構成されてよく、予測ブロック265は、残差ブロック205の計算のため及び再構築ブロック215の再構築のために使用される。
【0090】
モード選択ユニット260の実施形態は、区分化及び予測モード(例えば、モード選択ユニット260によってサポートされているもの又はモード選択ユニット260に利用可能なものから)選択するように構成されてよく、これにより、最良のマッチ、又は換言すれば、最小残差(最小残差は、送信又は保存のための圧縮率がより良好であることを意味する)、又は、最小シグナリングオーバヘッド(最小シグナリングオーバヘッドは、送信又は保存のための圧縮率がより良好であることを意味する)、又はこれらの両方を考慮したもしくはバランスを取ったものを提供する。モード選択ユニット260は、レート歪み最適化(RDO)に基づいて区分化及び予測モードを決定する、すなわち、最小レート歪みを提供する予測モードを選択するように構成されてよい。この文脈において「最良」、「最小」、「最適」等のような用語は、全般的な「最良」、「最小」、「最適」等を必ずしも指さず、値が閾値又は他の制約を超過又は下回り、潜在的に「準最適選択」につながるが複雑性及び処理時間を低減するような、終了又は選択基準の達成を指してもよい。
【0091】
換言すれば、区分化ユニット262は、ビデオシーケンスからのピクチャを一連のコーディングツリーユニット(CTU)に区分化するように構成されてよく、CTU203は、例えば、クアッドツリー区分化(QT)、バイナリ区分化(BT)、もしくはトリプルツリー区分化(TT)、又はそれらの任意の組み合わせを繰り返し用いて、より小さいブロック区分又は(やはりブロックを形成する)サブブロックにさらに区分化されてよく、また、例えば、ブロック区分又はサブブロックのそれぞれのための予測を実行するように構成されてよく、モード選択は、区分化されたブロック203のツリー構造の選択を含み、予測モードは、ブロック区分又はサブブロックのそれぞれに適用される。
【0092】
以下では、例示的なビデオエンコーダ20によって実行される、区分化(例えば、区分化ユニット260による)及び予測処理(インター予測ユニット244及びイントラ予測ユニット254による)をより詳細に説明する。
【0093】
[区分化]
区分化ユニット262は、ビデオシーケンスからのピクチャを一連のコーディングツリーユニット(CTU)に区分化するように構成されてよく、区分化ユニット262は、コーディングツリーユニット(CTU)203をより小さい区分、例えば、正方形又は矩形サイズのより小さいブロックに区分化(又は分割)してよい。3つのサンプルアレイを有するピクチャの場合、CTUは、クロマサンプルの2つの対応するブロックと共に、ルマサンプルのN×Nブロックからなる。CTUにおけるルマブロックの最大許容サイズは、開発中の多目的ビデオコーディング(VVC)において、128×128に指定されるが、将来は128×128以外の値、例えば256×256に指定され得る。ピクチャのCTUは、スライス/タイルグループ、タイル又はブリックとしてクラスター化/グループ化されてよい。タイルは、ピクチャの矩形領域をカバーし、タイルは、1又は複数のブリックに分割できる。ブリックは、タイル内の多数のCTU行からなる。複数のブリックに区分化されないタイルはブリックと称することができる。しかしながら、ブリックは、タイルの真のサブセットであり、タイルと称されない。VVCにおいてサポートされるタイルグループには2つのモードがある。すなわち、ラスタースキャンスライス/タイルグループモード及び矩形スライスモードである。ラスタースキャンタイルグループモードにおいて、スライス/タイルグループは、ピクチャのタイルラスタースキャンにおける一連のタイルを含む。矩形スライスモードにおいて、スライスは、まとめてピクチャの矩形領域を形成するピクチャの多数のブリックを含む。矩形スライス内のブリックは、スライスのブリックラスタースキャンの順序になっている。これらのより小さいブロック(サブブロックとも称され得る)は、さらにより小さい区分にさらに区分化されてよい。これは、ツリー区分化もしくは階層ツリー区分化とも称され、ここで、例えばルートツリーレベル0(階層レベル0、深度0)にあるルートブロックは、再帰的に区分化、例えば、次に低いツリーレベルの2つ以上のブロック、例えばツリーレベル1(階層レベル1、深度1)にあるノードに区分化されてよく、これらのブロックは、例えば終了基準が達成されたことで、例えば最大ツリー深度又は最小ブロックサイズに達したことで、区分化が終了するまで、次に低いレベル、例えばツリーレベル2(階層レベル2、深度2)の2つ以上のブロックに再度区分化される等してよい。さらに区分化されないブロックは、ツリーのリーフブロック又はリーフノードとも称される。2つの区分への区分化を用いるツリーは、バイナリツリー(BT)と称され、3つの区分への区分化を用いるツリーは、ターナリツリー(TT)と称され、4つの区分への区分化を用いるツリーは、クアッドツリー(QT)と称される。
【0094】
例えば、コーディングツリーユニット(CTU)は、3つのサンプルアレイを有するピクチャのルマサンプルのCTB、クロマサンプルの2つの対応するCTB、又は、モノクロピクチャのもしくはサンプルをコードするために使用された3つの別個の色平面及びシンタックス構造を用いてコードされたピクチャのサンプルのCTBであるか、又はそれらを含んでよい。対応して、コーディングツリーブロック(CTB)は、CTBへの構成要素の分割が区分化であるように、或るNの値に関してサンプルのN×Nブロックであってよい。コーディングユニット(CU)は、ルマサンプルのコーディングブロック、3つのサンプルアレイを有するピクチャのクロマサンプルの2つの対応するコーディングブロック、又は、モノクロピクチャのもしくはサンプルをコードするために使用された3つの別個の色平面及びシンタックス構造を用いてコードされたピクチャのサンプルのコーディングブロックであるか、又はそれらを含んでよい。対応して、コーディングブロック(CB)は、コーディングブロックへのCTBの分割が区分化であるように、或るM及びNの値に関してサンプルのM×Nブロックであってよい。
【0095】
例えば、HEVCに従う実施形態において、コーディングツリーユニット(CTU)は、コーディングツリーとして示されるクアッドツリー構造を用いることによってCUに分割されてよい。ピクチャエリアを、インターピクチャ(時間)予測を用いてコードするのか又はイントラピクチャ(空間)予測を用いてコードするのかの決定は、リーフCUレベルで行われる。各リーフCUは、PUの分割タイプに従って、1つ、2つ、又は4つのPUにさらに分割することができる。1つのPUの内部では、同じ予測処理が適用され、関連情報はPUベースでデコーダに送信される。PUの分割タイプに基づいて予測処理を適用することによって残差ブロックを取得した後、リーフCUは、CUのためのコーディングツリーと同様の別のクアッドツリー構造に従って変換ユニット(TU)に区分化できる。
【0096】
実施形態において、例えば、多目的ビデオコーディング(VVC)と称される現在開発中の最新のビデオコーディング規格によれば、組み合わされたクアッドツリーが、例えばコーディングツリーユニットを区分化するのに使用されるバイナリ及びターナリ分割セグメンテーション構造を使用して、マルチタイプツリーをネストした。コーディングツリーユニット中のコーディングツリー構造において、CUは、正方形又は矩形のいずれかとすることができる。例えば、コーディングツリーユニット(CTU)は、最初にクオータナリツリーによって区分化される。次に、クオータナリツリーリーフノードは、マルチタイプツリー構造によってさらに区分化され得る。マルチタイプツリー構造には4つの分割タイプ、すなわち、垂直バイナリ分割(SPLIT_BT_VER)、水平バイナリ分割(SPLIT_BT_HOR)、垂直ターナリ分割(SPLIT_TT_VER)及び水平ターナリ分割(SPLIT_TT_HOR)がある。マルチタイプツリーリーフノードは、コーディングユニット(CU)と呼ばれ、CUが最大変換長に対して大きすぎない限り、このセグメンテーションは、任意のさらなる区分化なしで、予測及び変換処理に使用される。このことは、ほとんどの場合において、CU、PU、及びTUは、ネストされたマルチタイプツリーコーディングブロック構造を有するクアッドツリーにおいて同じブロックサイズを有することを意味する。サポートされる最大変換長がCUの色成分の幅又は高さよりも小さいとき、例外が発生する。VVCは、ネストされたマルチタイプツリーコーディングツリー構造を有するクアッドツリーにおける区分分割情報の独自のシグナリングメカニズムを展開する。シグナリングメカニズムにおいて、コーディングツリーユニット(CTU)は、クオータナリツリーのルートとして扱われ、最初にクオータナリツリー構造によって区分化される。そして、各クオータナリツリーリーフノードは、(それを可能とするのに十分大きいとき)マルチタイプツリー構造によってさらに区分化される。マルチタイプツリー構造において、ノードがさらに区分化されるかどうかを示すために第1のフラグ(mtt_split_cu_flag)がシグナリングされ、ノードがさらに区分化されるとき、分割方向を示すために第2のフラグ(mtt_split_cu_vertical_flag)がシグナリングされ、次に、分割がバイナリ分割であるのか又はターナリ分割であるのかを示すために第3のフラグ(mtt_split_cu_binary_flag)がシグナリングされる。mtt_split_cu_vertical_flag及びmtt_split_cu_binary_flagの値に基づいて、CUのマルチタイプツリー分割モード(MttSplitMode)が、予め定義されたルール又はテーブルに基づいてデコーダによって導出され得る。特定の設計、例えば、VVCハードウェアデコーダにおける64×64ルマブロック及び32×32クロマパイプライン設計では、
図6に示されるように、ルマコーディングブロックの幅又は高さのいずれかが64よりも大きいとき、TT分割が禁止されることに留意すべきである。TT分割はまた、クロマコーディングブロックの幅又は高さのいずれかが32よりも大きいとき、禁止される。パイプライン設計は、ピクチャにおける非重複ユニットとして定義される仮想パイプラインデータユニット(VPDU)にピクチャを分割する。ハードウェアデコーダにおいて、連続するVPDUが複数のパイプラインステージによって同時に処理される。VPDUサイズは、大部分のパイプラインステージにおいてバッファサイズに概ね比例するので、VPDUサイズを小さく維持することは重要である。大部分のハードウェアデコーダにおいて、VPDUサイズは、最大変換ブロック(TB)サイズに設定され得る。しかしながら、VVCにおいて、ターナリツリー(TT)及びバイナリツリー(BT)区分は、VPDUサイズの増加につながり得る。加えて、ツリーノードブロックの一部が、下又は右のピクチャ境界を超える場合、コードされたあらゆるCUの全てのサンプルがピクチャ境界内に位置するまで、ツリーノードブロックは強制的に分割されることに留意すべきである。
【0097】
一例として、イントラサブ区分(ISP)ツールは、ブロックサイズに応じて、ルマイントラ予測ブロックを垂直又は水平に2又は4つのサブ区分に分割し得る。
【0098】
1つの例において、ビデオエンコーダ20のモード選択ユニット260は、本明細書に記載の区分化技術の任意の組み合わせを実行するように構成されてよい。
【0099】
上述したように、ビデオエンコーダ20は、(例えば、事前決定された)予測モードのセットから最良又は最適な予測モードを決定又は選択するように構成されている。予測モードのセットは、例えば、イントラ予測モード及び/又はインター予測モードを含んでよい。
【0100】
[イントラ予測]
イントラ予測モードのセットは、35の異なるイントラ予測モード、例えば、DC(又はミーン)モード及び平面モードのような無方向性モード、もしくは、例えばHEVCにおいて定義されているような、方向性モードを含んでよく、又は、67の異なるイントラ予測モード、例えば、DC(又はミーン)モード及び平面モードのような無方向性モード、もしくは、例えばVVCに関して定義されている、方向性モードを含んでよい。一例として、いくつかの従来の角度イントラ予測モードは、例えばVVCにおいて定義されているような、非正方形ブロックについてのワイドアングルイントラ予測モードと適応的に置き換えられる。別の例として、DC予測についての分割演算を回避するために、長辺のみが、非正方形ブロックについての平均を計算するのに使用される。そして、平面モードのイントラ予測の結果は、位置依存イントラ予測組み合わせ(PDPC)法によってさらに修正され得る。
【0101】
イントラ予測ユニット254は、同じ現在のピクチャの隣接ブロックの再構築サンプルを使用して、イントラ予測モードのセットのうちのイントラ予測モードに従って、イントラ予測ブロック265を生成するように構成されている。
【0102】
イントラ予測ユニット254(又は一般にモード選択ユニット260)は、イントラ予測パラメータ(又は一般に、ブロックのために選択されたイントラ予測モードを示す情報)を、エンコードされたピクチャデータ21に含まれるようにシンタックス要素266の形態でエントロピーエンコーディングユニット270に出力するようにさらに構成され、それにより、例えば、ビデオデコーダ30は、デコーディングのための予測パラメータを受信して使用してよい。
【0103】
[インター予測]
インター予測モードのセット(又は可能なインター予測モード)は、利用可能な参照ピクチャ(すなわち、例えばDBP230に保存された、以前の少なくとも部分的にデコードされたピクチャ)及び他のインター予測パラメータ、例えば、最良にマッチする参照ブロックの検索に使用されたのは、参照ピクチャの全体なのかもしくは参照ピクチャの一部のみ、例えば、現在のブロックのエリアの周りの検索窓エリアなのか、及び/又は、例えば、画素補間、例えばハーフ/セミペル、クオータペル及び/又は1/16ペル補間が適用されたか否かに依拠する。
【0104】
上記の予測モードに加えて、スキップモード、ダイレクトモードが適用され得る。
【0105】
インター予測ユニット244は、動き推定(ME)ユニット及び動き補償(MC)ユニット(両方とも
図2には図示せず)を備えてよい。動き推定ユニットは、動き推定のために、ピクチャブロック203(現在のピクチャ17の現在のピクチャブロック203)及びデコードされたピクチャ231、又は、少なくとも1又は複数の以前に再構築されたブロック、例えば1又は複数の他の/異なる以前にデコードされたピクチャ231の再構築ブロックを受信又は取得するように構成されてよい。例えば、ビデオシーケンスは、現在のピクチャ及び以前にデコードされたピクチャ231を含んでよく、又は換言すれば、現在のピクチャ及び以前にデコードされたピクチャ231は、ビデオシーケンスを形成する一連のピクチャの一部であるか又はそれを形成してよい。
【0106】
エンコーダ20は、例えば、複数の他のピクチャのうちの同じ又は異なるピクチャの複数の参照ブロックから参照ブロックを選択し、インター予測パラメータとして参照ピクチャ(又は参照ピクチャインデックス)及び/又は参照ブロックの位置(x、y座標)と現在のブロックの位置との間のオフセット(空間的オフセット)を動き推定ユニットに提供するように構成してよい。このオフセットは、動きベクトル(MV)とも呼ばれる。
【0107】
動き補償ユニットは、インター予測パラメータを取得、例えば受信するとともに、そのインター予測パラメータに基づいて又はそれを使用してインター予測を実行して、インター予測ブロック265を取得するように構成されている。動き補償ユニットによって実行される動き補償は、動き推定によって決定された動き/ブロックベクトルに基づいて予測ブロックをフェッチ又は生成し、場合によってサブ画素精度までの補間を実行することを伴ってよい。補間フィルタリングは、既知の画素サンプルからさらなる画素サンプルを生成してよく、したがって、ピクチャブロックをコードするのに用いられ得る候補予測ブロックの数を潜在的に増加させる。現在のピクチャブロックのPUのための動きベクトルを受信すると、動き補償ユニットは、参照ピクチャリストのうちの1つにおいて動きベクトルが指し示す予測ブロックを位置特定してよい。
【0108】
動き補償ユニットは、ビデオスライスのピクチャブロックをデコードする際にビデオデコーダ30によって用いられる、ブロック及びビデオスライスに関連付けられるシンタックス要素を生成してもよい。スライス及びそれぞれのシンタックス要素に加えて、又は代替的に、タイルグループ及び/又はタイル、ならびに、それぞれのシンタックス要素が生成又は使用され得る。
【0109】
[エントロピーコーディング]
エントロピーエンコーディングユニット270は、例えば、エントロピーエンコーディングアルゴリズム又はスキーム(例えば、可変長コーディング(VLC)スキーム、コンテキスト適応VLCスキーム(CAVLC)、算術コーディングスキーム、二値化、コンテキスト適応バイナリ算術コーディング(CABAC)、シンタックスベースのコンテキスト適応バイナリ算術コーディング(SBAC)、確率インターバル区分化エントロピー(PIPE)コーディング、又は、別のエントロピーエンコーディング方法もしくは技術)、又はバイパス(無圧縮)を、量子化係数209、インター予測パラメータ、イントラ予測パラメータ、ループフィルタパラメータ、及び/又は他のシンタックス要素に適用し、例えばエンコードされたビットストリーム21の形態で出力272を介して出力できるエンコードされたピクチャデータ21を取得するように構成され、それにより、例えば、ビデオデコーダ30は、デコーディングのためのパラメータを受信して使用してよい。エンコードされたビットストリーム21は、ビデオデコーダ30に送信、又は、後でビデオデコーダ30によって送信又は取得するためにメモリに保存されてよい。
【0110】
ビデオエンコーダ20の他の構造的変形形態を、ビデオストリームをエンコードするのに用いることができる。例えば、非変換ベースのエンコーダ20は、特定のブロック又はフレームのための変換処理ユニット206を用いずに直接的に残差信号を量子化できる。別の実装において、エンコーダ20は、単一のユニットに組み合わされた量子化ユニット208及び逆量子化ユニット210を有することができる。
【0111】
[デコーダ及びデコーディング方法]
図3は、本願の技術を実装するように構成されているビデオデコーダ30の一例を示している。ビデオデコーダ30は、例えばエンコーダ20によってエンコードされた、エンコードされたピクチャデータ21(例えば、エンコードされたビットストリーム21)を受信して、デコードされたピクチャ331を取得するように構成されている。エンコードされたピクチャデータ又はビットストリームは、エンコードされたピクチャデータをデコードするための情報、例えば、エンコードされたビデオスライス(及び/又はタイルグループ又はタイル)のピクチャブロック及び関連付けられたシンタックス要素を表すデータを含む。
【0112】
図3の例において、デコーダ30は、エントロピーデコーディングユニット304、逆量子化ユニット310、逆変換処理ユニット312、再構築ユニット314(例えば、合算器314)、ループフィルタ320、デコードされたピクチャバッファ(DBP)330、モード適用ユニット360、インター予測ユニット344、及びイントラ予測ユニット354を備える。インター予測ユニット344は、動き補償ユニットであるか又はこれを備えてよい。ビデオデコーダ30は、いくつかの例では、
図2のビデオエンコーダ100に関して説明されたエンコーディングパスに対して概ね逆のデコーディングパスを実行してよい。
【0113】
エンコーダ20に関して説明したように、逆量子化ユニット210、逆変換処理ユニット212、再構築ユニット214、ループフィルタ220、デコードされたピクチャバッファ(DPB)230、インター予測ユニット344、及びイントラ予測ユニット354も、ビデオエンコーダ20の「内蔵デコーダ」を形成するものとして言及される。したがって、逆量子化ユニット310は、逆量子化ユニット110と機能的に同一であってよく、逆変換処理ユニット312は、逆変換処理ユニット212と機能的に同一であってよく、再構築ユニット314は、再構築ユニット214と機能的に同一であってよく、ループフィルタ320は、ループフィルタ220と機能的に同一であってよく、デコードされたピクチャバッファ330は、デコードされたピクチャバッファ230と機能的に同一であってよい。したがって、ビデオエンコーダ20のそれぞれのユニット及び機能について提供された説明は、ビデオデコーダ30のそれぞれのユニット及び機能に対応して当てはまる。
【0114】
[エントロピーデコーディング]
エントロピーデコーディングユニット304は、ビットストリーム21(又は一般にエンコードされたピクチャデータ21)をパースし、例えば、エンコードされたピクチャデータ21にエントロピーデコーディングを実行して、例えば量子化係数309及び/又はデコードされたコーディングパラメータ(
図3には図示せず)、例えば、インター予測パラメータ(例えば、参照ピクチャインデックス及び動きベクトル)、イントラ予測パラメータ(例えば、イントラ予測モード又はインデックス)、変換パラメータ、量子化パラメータ、ループフィルタパラメータ、及び/又は他のシンタックス要素のいずれか又は全てを取得するように構成されている。エントロピーデコーディングユニット304は、エンコーダ20のエントロピーエンコーディングユニット270に関して記載されたエンコーディングスキームに対応するデコーディングアルゴリズム又はスキームを適用するように構成されてよい。エントロピーデコーディングユニット304は、インター予測パラメータ、イントラ予測パラメータ、及び/又は他のシンタックス要素をモード適用ユニット360に、また他のパラメータをデコーダ30の他のユニットに提供するようにさらに構成されてよい。ビデオデコーダ30は、ビデオスライスレベルで及び/又はビデオブロックレベルで、シンタックス要素を受信してよい。スライス及びそれぞれのシンタックス要素に加えて又は代替的に、タイルグループ及び/又はタイル、ならびに、それぞれのシンタックス要素が受信及び/又は使用され得る。
【0115】
[逆量子化]
逆量子化ユニット310は、エンコードされたピクチャデータ21から量子化パラメータ(QP)(又は一般に逆量子化に関連する情報)及び量子化係数を受信する(例えばエントロピーデコーディングユニット304によって、例えばパース及び/又はデコードすることによって)とともに、量子化パラメータに基づいて、デコードされた量子化係数309に逆量子化を適用し、変換係数311とも称され得る量子化解除係数311を取得するように構成されてよい。逆量子化処理は、量子化の程度、また同様に適用されるべき逆量子化の程度を決定するために、ビデオスライス(又はタイルもしくはタイルグループ)内のビデオブロック毎にビデオエンコーダ20によって決定される量子化パラメータの使用を含んでよい。
【0116】
[逆変換]
逆変換処理ユニット312は、変換係数311とも称される量子化解除係数311を受信するとともに、サンプル領域における再構築残差ブロック213を取得するために、量子化解除係数311に変換を適用するように構成されてよい。再構築残差ブロック213は、変換ブロック313とも称され得る。変換は、逆変換、例えば、逆DCT、逆DST、逆整数変換、又は概念的に同様の逆変換処理であってよい。逆変換処理ユニット312は、エンコードされたピクチャデータ21から変換パラメータ又は対応する情報を受信し(例えばエントロピーデコーディングユニット304によって、例えばパース及び/又はデコードすることによって)、量子化解除係数311に適用されるべき変換を決定するようにさらに構成されてよい。
【0117】
[再構築]
再構築ユニット314(例えば、加算器又は合算器314)は、再構築残差ブロック313を予測ブロック365に加算し、例えば、再構築残差ブロック313のサンプル値と予測ブロック365のサンプル値とを加算することによって、サンプル領域における再構築ブロック315を取得するように構成されてよい。
【0118】
[フィルタリング]
ループフィルタユニット320(コーディングループ内又はコーディングループの後のいずれかにある)は、例えば、画素遷移を滑らかにするように又はビデオ品質を別様に改善するように、再構築ブロック315をフィルタして、フィルタリングされたブロック321を取得するように構成されている。ループフィルタユニット320は、デブロッキングフィルタ、サンプル適応型オフセット(SAO)フィルタ、又は、1もしくは複数の他のフィルタ、例えば、適応ループフィルタ(ALF)、ノイズ抑制フィルタ(NSF)、又はそれらの任意の組み合わせ等、1又は複数のループフィルタを含み得る。一例において、ループフィルタユニット220はデブロッキングフィルタ、SAOフィルタ、及びALFフィルタを含み得る。フィルタリング処理の順序は、デブロッキングフィルタ、SAO、及びALFであり得る。別の例において、クロマスケーリングを伴うルママッピング(LMCS)(すなわち、適応インループリシェーパ)と呼ばれる処理が追加される。この処理はデブロッキングの前に実行される。別の例において、デブロッキングフィルタ処理はまた、内部サブブロックエッジ、例えば、アフィンサブブロックエッジ、ATMVPサブブロックエッジ、サブブロック変換(SBT)エッジ、及びイントラサブ区分(ISP)エッジに適用され得る。ループフィルタユニット320が、インループフィルタであるものとして
図3に示されているが、他の構成では、ループフィルタユニット320はポストループフィルタとして実装されてもよい。
【0119】
[デコードされたピクチャバッファ]
ピクチャのデコードされたビデオブロック321は、その後、デコードされたピクチャバッファ330に保存され、デコードされたピクチャバッファ330は、デコードされたピクチャ331を他のピクチャの後続の動き補償のための及び/又はそれぞれ表示を出力するための参照ピクチャとして保存する。
【0120】
デコーダ30は、例えば出力312を介して、ユーザに提示又は閲覧させるために、デコードされたピクチャ311を出力するように構成されている。
【0121】
[予測]
インター予測ユニット344は、インター予測ユニット244(特に、動き補償ユニット)と同一であってよく、イントラ予測ユニット354は、インター予測ユニット254と機能的に同一であってよく、エンコードされたピクチャデータ21から受信(例えば、エントロピーデコーディングユニット304によって、例えば、パース及び/又はデコードすることによって)された区分化及び/又は予測パラメータ又はそれぞれの情報に基づいて分割又は区分化の決定及び予測を実行する。モード適用ユニット360は、再構築ピクチャ、ブロック、又はそれぞれのサンプル(フィルタリングされた又はフィルタリングされていない)に基づいてブロック毎に予測(イントラ又はインター予測)を実行し、予測ブロック365を取得するように構成されてよい。
【0122】
ビデオスライスがイントラコードされた(I)スライスとしてコードされている場合、モード適用ユニット360のイントラ予測ユニット354は、シグナリングされたイントラ予測モード及び現在のピクチャの以前にデコードされたブロックからのデータに基づいて、現在のビデオスライスのピクチャブロックのための予測ブロック365を生成するように構成されている。ビデオピクチャがインターコードされた(すなわち、B又はP)スライスとしてコードされている場合、モード適用ユニット360のインター予測ユニット344(例えば、動き補償ユニット)は、動きベクトル及びエントロピーデコーディングユニット304から受信された他のシンタックス要素に基づいて、現在のビデオスライスのビデオブロックのための予測ブロック365を生成するように構成されている。インター予測では、予測ブロックは、参照ピクチャリストのうちの1つに含まれる参照ピクチャのうちの1つから生成されてよい。ビデオデコーダ30は、List0及びList1という参照フレームリストを、デフォルトの構築技術を用いて、DPB330に保存された参照ピクチャに基づいて構築してよい。同じ又は同様のことが、スライス(例えばビデオスライス)に加えて又は代替的にタイルグループ(例えばビデオタイルグループ)及び/又はタイル(例えばビデオタイル)を使用する実施形態について、又は、それによって適用され得る。例えば、ビデオは、I、P、又はBタイルグループ及び/又はタイルを使用してコードされ得る。
【0123】
モード適用ユニット360は、動きベクトル又は関連情報及び他のシンタックス要素をパースすることによって、現在のビデオスライスのビデオブロックのための予測情報を決定するように構成され、デコードされている現在のビデオブロックのための予測ブロックを生成するために上記予測情報を用いる。例えば、モード適用ユニット360は、受信されたシンタックス要素のいくつかを用いて、ビデオスライスのビデオブロックをコードするのに用いられた予測モード(例えば、イントラ又はインター予測)、インター予測スライスタイプ(例えば、Bスライス、Pスライス、又はGPBスライス)、スライスのための参照ピクチャリストのうちの1もしくは複数に関する構築情報、スライスの各インターエンコードされたビデオブロック毎の動きベクトル、スライスのインターコードされたビデオブロック毎のインター予測ステータス、及び現在のビデオスライス内のビデオブロックをデコードするための他の情報を決定する。同じ又は同様のことが、スライス(例えばビデオスライス)に加えて又は代替的にタイルグループ(例えばビデオタイルグループ)及び/又はタイル(例えばビデオタイル)を使用する実施形態について、又は、それによって適用され得る。例えば、ビデオは、I、P、又はBタイルグループ及び/又はタイルを使用してコードされ得る。
【0124】
図3に示されるビデオデコーダ30の実施形態は、スライス(ビデオスライスとも称される)を使用することによってピクチャを区分化及び/又はデコードするように構成されてよく、ピクチャは、1又は複数のスライス(典型的には非重複)を使用して区分化又はデコードされてよく、各スライスは、1もしくは複数のブロック(例えばCTU)又はブロックの1もしくは複数のグループ(例えば、タイル(H.265/HEVC及びVVC)もしくはブリック(VVC))を含んでよい。
【0125】
図3に示されるビデオデコーダ30の実施形態は、スライス/タイルグループ(ビデオタイルグループとも称される)及び/又はタイル(ビデオタイルとも称される)を使用することによってピクチャを区分化及び/又はデコードするように構成されてよく、ピクチャは、1又は複数のスライス/タイルグループ(典型的には非重複)を使用して区分化又はデコードされてよく、各スライス/タイルグループは、例えば1もしくは複数のブロック(例えばCTU)又は1もしくは複数のタイルを含んでよく、各タイルは、例えば矩形形状であってよく、1又は複数のブロック(例えば、CTU)、例えば完全又は部分的ブロックを含んでよい。
【0126】
ビデオデコーダ30の他の変形形態を、エンコードされたピクチャデータ21をデコードするのに用いることができる。例えば、デコーダ30は、ループフィルタリングユニット320を用いずに、出力ビデオストリームを生成することができる。例えば、非変換ベースのデコーダ30は、特定のブロック又はフレームのための逆変換処理ユニット312を用いずに、残差信号を直接的に逆量子化することができる。別の実装において、ビデオデコーダ30は、単一のユニットに組み合わされた逆量子化ユニット310及び逆変換処理ユニット312を有することができる。
【0127】
エンコーダ20及びデコーダ30において、現在のステップの処理結果は、さらに処理されて、その後、次のステップに出力されてよいことが理解されるべきである。例えば、補間フィルタリング、動きベクトル導出又はループフィルタリングの後に、クリップ又はシフト等のさらなる演算を、補間フィルタリング、動きベクトル導出又はループフィルタリングの処理結果に対して実行してよい。
【0128】
さらなる演算を、現在のブロックの導出された動きベクトル(限定するものではないが、アフィンモードの制御点動きベクトル、アフィン、平面、ATMVPモードにおけるサブブロック動きベクトル、時間的な動きベクトル等を含む)に適用してよいことに留意すべきである。例えば、動きベクトルの値は、その表現ビットに従って予め定義された範囲に制限される。動きベクトルの表現ビットがbitDepthである場合、その範囲は、-2^(bitDepth-1)~2^(bitDepth-1)-1であり、ここで、「^」はべき乗を意味する。例えば、bitDepthが16に等しく設定されている場合、その範囲は-32768~32767であり、bitDepthが18に等しく設定されている場合、その範囲は-131072~131071である。例えば、導出された動きベクトル(例えば、1つの8×8ブロック内の4つの4×4サブブロックのMV)の値は、4つの4×4サブブロックMVの整数部分の間の最大差が、1画素以下等、N画素以下であるように制限される。以下、bitDepthに従って動きベクトルを制限する2つの方法を提供する。
【0129】
図4は、本開示の一実施形態によるビデオコーディングデバイス400の概略図である。ビデオコーディングデバイス400は、本明細書に記載の開示される実施形態を実装するのに好適なものである。一実施形態において、ビデオコーディングデバイス400は、
図1Aのビデオデコーダ30等のデコーダ、又は、
図1Aのビデオエンコーダ20等のエンコーダであってよい。
【0130】
ビデオコーディングデバイス400は、データを受信するための入口ポート410(又は、入力ポート410)及び受信器ユニット(Rx)420と、データを処理するためのプロセッサ、論理ユニット、又は中央演算処理装置(CPU)430と、データを送信するための送信器ユニット(Tx)440及び出口ポート450(又は出力ポート450)と、データを保存するためのメモリ460とを備える。ビデオコーディングデバイス400は、入口ポート410、受信器ユニット420、送信器ユニット440、及び、光又は電気信号の出入りのための出口ポート450に連結されている、光/電気(OE)コンポーネント及び電気/光(EO)コンポーネントを備えてもよい。
【0131】
プロセッサ430は、ハードウェア及びソフトウェアによって実装される。プロセッサ430は、1又は複数のCPUチップ、コア(例えば、マルチコアプロセッサとして)、FPGA、ASIC、及びDSPとして実装されてよい。プロセッサ430は、入口ポート410、受信器ユニット420、送信器ユニット440、出口ポート450、及びメモリ460と通信する。プロセッサ430は、コーディングモジュール470を備える。コーディングモジュール470は、上述した開示される実施形態を実装する。例えば、コーディングモジュール470は、様々なコーディング演算を実装、処理、準備、又は提供する。したがって、コーディングモジュール470を含むことにより、ビデオコーディングデバイス400の機能のかなりの改善が提供され、ビデオコーディングデバイス400の異なる状態への変換がもたらされる。代替的に、コーディングモジュール470は、メモリ460に保存され、プロセッサ430により実行される命令として実装される。
【0132】
メモリ460は、1又は複数のディスク、テープドライブ、及びソリッドステートドライブを備えてよく、そのようなプログラムが実行のために選択された場合にプログラムを保存して、プログラム実行中に読み取られる命令及びデータを保存するように、オーバーフローデータストレージデバイスとして使用されてよい。メモリ460は、例えば、揮発性及び/又は不揮発性であってよく、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、三値連想メモリ(TCAM)、及び/又は、スタティックランダムアクセスメモリ(SRAM)であってよい。
【0133】
図5は、例示的な実施形態による
図1Aからのソースデバイス12及びデスティネーションデバイス14のいずれか又は両方として使用されてよい装置500の簡略ブロック図である。
【0134】
装置500におけるプロセッサ502は、中央演算処理装置とすることができる。代替的には、プロセッサ502は、現在既存の又は今後開発される情報の操作又は処理が可能な任意の他のタイプのデバイス、又は複数のデバイスとすることができる。開示される実装は、図示のような単一のプロセッサ、例えばプロセッサ502で実施できるが、1つより多いプロセッサを用いて、速度及び効率の利益を実現できる。
【0135】
装置500におけるメモリ504は、一実装において、リードオンリメモリ(ROM)デバイス又はランダムアクセスメモリ(RAM)デバイスとすることができる。任意の他の好適なタイプのストレージデバイスを、メモリ504として使用できる。メモリ504は、バス512を用いてプロセッサ502によってアクセスされるコード及びデータ506を備えることができる。メモリ504は、オペレーティングシステム508及びアプリケーションプログラム510をさらに備えることができ、アプリケーションプログラム510は、プロセッサ502が本明細書に記載の方法を実行することを可能にする少なくとも1つのプログラムを含む。例えば、アプリケーションプログラム510は、アプリケーション1~Nを含むことができ、アプリケーション1~Nは、本明細書に記載の方法を実行するビデオコーディングアプリケーションをさらに含む。
【0136】
装置500は、ディスプレイ518等の、1又は複数の出力デバイスも備えることができる。ディスプレイ518は、1つの例において、ディスプレイと、タッチ入力を検知するように動作可能なタッチセンサ素子とを組み合わせたタッチセンサ式ディスプレイであってよい。ディスプレイ518は、バス512を介してプロセッサ502に連結できる。
【0137】
単一のバスとして本明細書に示したが、装置500のバス512は、複数のバスから構成できる。さらに、セカンダリストレージ514は、装置500の他のコンポーネントに直接連結でき、又は、ネットワークを介してアクセスでき、メモリカード等の単一の一体型ユニット又は複数のメモリカード等の複数のユニットを含むことができる。したがって、装置500は、多種多様な構成で実装することができる。
【0138】
いくつかの関連する例は以下であり、JVET会合文書JVET-N1002が参照として使用されることに留意されたい。
【0139】
[I.マージ予測]
マージ候補リストは、以下の5つのタイプの候補を順に含めることによって構築される。
1)空間近傍CUからの空間的MVP
2)コロケートCUからの時間的MVP
3)FIFOテーブルからの履歴ベースのMVP
4)ペアワイズ平均MVP
5)ゼロMV。
【0140】
マージリストのサイズは、スライスヘッダにおいてシグナリングされ、マージリストの最大許容サイズは整数であり、例えば、その数は6であり得る。マージモードにおける各CUコードについて、最良のマージ候補のインデックスがエンコードされる。マージ候補の各カテゴリの生成処理が、このセッションにおいて提供される。
【0141】
[(1)空間候補導出]
一例として、
図6に示される位置に位置する候補の中から最大4つのマージ候補が選択される。導出の順序は、A0、B0、B1、A1及びB2である。位置B2は、位置A0、B0、B1、A1の任意のCUが利用可能でない(例えば、別のスライス又はタイルに属するという理由で)、又は、イントラコードされる場合にのみ考慮される。位置A1における候補が追加された後に、残りの候補の追加が冗長チェックを受ける。これにより、同じ動き情報を有する候補がリストから除外されることが確実になる。実現可能な実装において、
図7における矢印でリンクされたペアのみが考慮され、候補は、冗長チェックに使用される対応する候補が同じ動き情報を有しない場合にリストに追加されるのみである。
【0142】
[(2)時間候補導出]
一例として、1つの候補のみがリストに追加される。特に、この時間的マージ候補の導出において、スケーリングされた動きベクトルが、コロケート参照ピクチャに属するコロケートCUに基づいて導出される。コロケートCUの導出に使用されることになる参照ピクチャリストは、スライスヘッダにおいて明示的にシグナリングされる。時間的マージ候補についてのスケーリングされた動きベクトルは、
図8において点線で示されるように取得され、POC距離tb及びtdを使用してコロケートCUの動きベクトルからスケーリングされ、tbは、現在のピクチャの参照ピクチャと現在のピクチャとの間のPOC差分として定義され、tdは、コロケートされたピクチャの参照ピクチャとコロケートされたピクチャとの間のPOC差分として定義される。時間的マージ候補の参照ピクチャインデックスはゼロに等しく設定される。
【0143】
POC(ピクチャ順序カウント)は、各ピクチャに関連付けられた変数を意味し、CVS(コードされたビデオシーケンス)における全てのピクチャのうち関連付けられたピクチャを一意に識別し、関連付けられたピクチャがデコードされたピクチャバッファから出力されることになる場合、デコードされたピクチャバッファから出力されることになる同じCVSにおける他のピクチャの出力順の位置に対する出力順で、関連付けられたピクチャの位置を示すことに留意されたい。
【0144】
[(3)履歴ベースのマージ候補導出]
履歴ベースのMVP(HMVP)マージ候補は、空間的MVP及びTMVPの後にマージリストに追加される。以前にコードされたブロックの動き情報は、テーブルに保存され、現在のCUのためのMVPとして使用される。複数のHMVP候補を有するテーブルは、エンコーディング/デコーディング処理中に維持される。テーブルは、新たなCTU行に遭遇するときにリセットされる。非サブブロックインターコードCUがあるときは常に、関連付けられた動き情報がテーブルの最後のエントリに新たなHMVP候補として追加される。テーブルにおける最新の複数のHMVP候補が順番にチェックされ、TMVP候補の後に候補リストに挿入される。HMVP候補から空間又は時間的マージ候補に対して冗長チェックが適用される。
【0145】
[(4)ペアワイズ平均マージ候補導出]
ペアワイズ平均候補は、既存のマージ候補リストにおける候補の予め定義されたペアを平均化することによって生成され、予め定義されたペアは{(0,1),(0,2),(1,2),(0,3),(1,3),(2,3)}と定義され、例えば、当該数は、マージ候補リストへのマージインデックスを示す。平均化された動きベクトルは、各参照リストについて別個に算出される。1つのリストにおいて両方の動きベクトルが利用可能である場合、これら2つの動きベクトルは、異なる参照ピクチャを指すときでも平均化される。1つの動きベクトルが利用可能でありさえすれば、その1つを直接使用する。利用可能な動きベクトルが無い場合、このリストを無効に維持する。
【0146】
(5)ペアワイズ平均マージ候補が追加された後に、マージリストが一杯でない場合、最大マージ候補数に遭遇するまで、末尾に0のMVPが挿入される。
【0147】
[II.双予測]
インターピクチャ予測は、イメージサンプルのブロックのための動き補償予測(MCP)を導出するために、ピクチャ間の時間相関性を利用する。ブロック毎に、予測因子としての役割を果たす、以前にデコードされたピクチャ内の対応するブロックを発見することができる。以前にデコードされたピクチャにおけるブロックの位置は、動きベクトル(Δx,Δy)によって示され、ここで、Δxは現在のブロックの位置に対する水平変位を指定し、Δyは垂直変位を指定する。動きベクトル(Δx,Δy)は、基礎オブジェクトの動きをより正確に捕捉するために、分数サンプル確度のものとすることができる。対応する動きベクトルが分数サンプル確度を有する場合、予測信号を導出するために、参照ピクチャに補間が適用される。以前にデコードされたピクチャは、参照ピクチャと称され、参照ピクチャリストへの参照インデックスΔtによって示される。
【0148】
(1セットの動きデータを使用する片予測に比較して)双予測の場合では、2セットの動きデータ(Δx0,Δy0,Δt0及びΔx1,Δy1,Δt1)を使用して、2つのMCP(異なるピクチャ又は同じピクチャからのものであり得る)を生成し、その後、これらを組み合わせて、最終的なMCPを取得する。一般に、これは平均化によって導出される。重み付けられた予測の場合、各MCPに異なる重みを適用できる。双予測に使用できる参照ピクチャは、2つの別個のリスト、すなわちlist0及びlist1に保存される。
【0149】
[III.動き情報保存]
動き補償が実行された後、予測ブロックに関連付けられた(片予測又は双予測)動き情報がメモリに保存される。保存された動き情報は、空間的又は時間的動きベクトル予測等によって、将来のブロック(CU/PU)の参照情報として使用される。
【0150】
いくつかの例において、動き情報保存は、動き情報サブブロック又は動き情報保存ユニットの二次元アレイを用いて実行される。二次元アレイの空間解像度は、コードされることになるイメージの空間解像度とは異なってよい。一例において、メモリスペースを節約するために、より低い解像度の動き情報保存ユニットが使用される。例えば、16×16ルマサンプルが単一の動き情報保存ユニットに対応し、これは、16×16ルマサンプルにおける各サンプルが同じ動き情報を有し、同じ動き情報が、この16×16ルマサンプルに対応する単一の動き情報保存ユニットに保存されることを意味する。換言すれば、動き情報保存ユニットは、16×16ルマサンプルからなる、関連付けられた予測ブロックのインターピクチャ予測情報を含む。
【0151】
また、16×16ルマサンプルは、二次元サンプルアレイであるルマサンプルのセットを意味し、二次元サンプルアレイの幅及び高さの両方が16であることに留意されたい。単一の動き情報保存ユニットは、8×8ルマサンプル、4×4ルマサンプル、又は他のN×Mルマサンプルもしくはクロマサンプルに対応してもよい。N及びMは、正の整数である。また、動き情報保存ユニットがより小さいサイズであるほど、より良い動きベクトル予測が可能となるが、より多くのメモリスペースが必要とされることが理解され得る。8×8のサイズのルマサンプルの予測ブロックのための動きベクトル保存が、
図9に例示されている。Mv0の符号が付けられた予測ブロックの動き情報は、各2×2動きベクトル保存ユニットに保存される。
【0152】
[III.インター予測のための三角形区分]
一例として、三角形区分モードは、8×8又はそれよりも大きく、スキップ又はマージモードでコードされたCUにのみ適用される。三角形区分モードが適用されるか否かを示すために、ACUレベルフラグがシグナリングされる。
【0153】
三角形区分モードにおけるCUは、対角線分割又は反対角線分割のいずれかを使用して、2つの三角形区分に均等に分割される(
図10)。CUにおける各三角形区分は、自身の動きを使用してインター予測される。片予測のみが各区分に許容される。すなわち、各区分は、1つの動きベクトル及び1つの参照インデックスを有する。片予測動きの制約は、従来の双予測と同じように、各CUについて2つの動き補償予測のみが必要であることを確実にするために適用される。各区分についての片予測動きは、上述されたマージ予測について構築されたマージ候補リストから直接導出され、リスト内の所与のマージ候補からの片予測動きの選択は、「片予測候補リスト構築」の手順に従うものである。三角形区分のそれぞれを予測した後に、対角線又は反対角線エッジに沿ったサンプル値が、適応的重みを伴うブレンディング処理を使用して調整される。最後に、三角形区分モードを使用して予測されるCUの動きフィールドが保存される。
【0154】
[(1)片予測候補リスト構築]
図11において一例として、マージ候補インデックスを与えられると、片予測動きベクトルは、上述されたマージ予測について構築されたマージ候補リストから導出される。リストにおける候補について、そのLX動きベクトル(Xはマージ候補インデックス値のパリティに等しい)は、三角形区分モードのための片予測動きベクトルとして使用される。これらの動きベクトルは、
図11において、「x」で示される。対応するLX動きベクトルが存在しない場合、マージ予測候補リストにおける同じ候補のL(1-X)動きベクトルは、三角形区分モードのための片予測動きベクトルとして使用される。
【0155】
[(2)三角形区分エッジに沿ったブレンディング]
各三角形区分を、それ自体の動きを使用して予測した後に、2つの予測信号にブレンディングが適用され、対角線又は反対角線エッジの周りのサンプルが導出される。
図12に示されるように、以下の重み、すなわち、ルマの場合は{7/8,6/8,5/8,4/8,3/8,2/8,1/8}、クロマの場合は{6/8,4/8,2/8}がブレンディング処理において使用される。
【0156】
[(3)動きフィールド保存]
一例として、三角形区分モードでコードされたCUの動きベクトルは、4×4ユニットに保存される。各4×4ユニットの位置に依拠して、片予測又は双予測動きベクトルのいずれかが保存される。区分1及び区分2それぞれのための片予測動きベクトルとしてMv1及びMv2を示す。4×4ユニットが、
図12の例に示す重み付けられていないエリアに位置する場合、その4×4ユニットに関してMv1又はMv2のいずれかが保存される。そうでなければ(4×4ユニットが、重み付けられたエリアに位置する場合)、双予測動きベクトルが保存される。双予測動きベクトルは、以下の処理に従ってMv1及びMv2から導出される。
1)Mv1及びMv2が異なる参照ピクチャリストから(一方がL0から、他方がL1から)のものである場合、Mv1及びMv2は、双予測動きベクトルを形成するように単に組み合わされる。
2)そうでなければ、Mv1及びMv2が同じリストからのものである場合、一般性を失うことなく、これらは両方ともL0からのものであると仮定される。この場合、
Mv2(又はMv1)のいずれかの参照ピクチャがL1に現れる場合、Mv2(又はMv1)は、L1におけるその参照ピクチャを使用してL1動きベクトルにコンバートされる。その後、2つの動きベクトルは、双予測動きベクトルを形成するように組み合わされる。そうでなければ、双予測動きの代わりに、片予測動きMv1のみが保存される。
【0157】
別の例として、三角形区分モードのための動きベクトル保存が、
図13に例示されている。
【0158】
[IV.インターブロックのための幾何学的区分化]
三角形区分モードに関して、2つのサブブロックが分離線によって分割され、分離線の方向は45度又は135度である。例えば、
図14に示すように、他の区分角度及び区分比率も可能であり、これらは本願においてGEO(幾何学的区分化)モードと呼ばれる。
【0159】
一例において、GEO区分化の総数は、140であり得る。この数は、柔軟性とビットコストとのバランスから最適であるとわかっている。GEOのための追加のシグナリングには、角度αと、ブロックの中心に対する分離線のずれρとのためのシグナリングが要求される。αは、分離度11.25での0~360度の間の量子化角度を表し、ρは、5つの異なる値を有する距離を表している。α及びρの意味は、
図15に例示されている。
【0160】
ビデオコーディングの技術分野において、一般に、エンコーダ側で実行される予測処理とデコーダ側で実行される予測処理とは同様であるが、ただし、デコーダ側において、サイド情報はビットストリームからパースされ、このとき、サイド情報は、レート歪み最適化(RDO)方法と同様に、予め設定されたルールによって決定されることが理解され得る。一例として、デコーダ側においてGEOモードで予測サンプルを取得するために、以下のステップが適用される。
【0161】
S101:現在のブロックのための区分比率を決定する。
【0162】
要素シンタックスgeo_partition_idxが、ビットストリームからパースされ、これは、α及びρペアを保存するルックアップテーブルへのインデックスとして使用される。一例において、α及びρは、それぞれ角度インデックス及び距離インデックスによって表される。
【0163】
S102:第1のサブブロックのための第1の予測モード及び第2のサブブロックのための第2の予測モードを取得する。
【0164】
一般に、三角形区分モードに使用される同じマージリスト導出処理は、GEOブロックの各区分(サブブロック)の動きベクトルを導出するのに使用される。各区分は、片予測のみによって予測される。2つの要素シンタックスgeo_merge_idx0及びgeo_merge_idx1は、2つのサブブロックの予測モードをそれぞれ示すために、ビットストリームからパースされる。
【0165】
一例において、第1の予測モードは、第2の予測モードと同一ではない。一例において、予測モード(第1の予測モード又は第2の予測モード)は、インター予測モードであってよく、インター予測モードのための情報は、参照ピクチャインデックス及び動きベクトルを含んでよい。別の例において、予測モードは、イントラ予測モードであってよく、イントラ予測モードのための情報は、イントラ予測モードインデックスを含んでよい。
【0166】
S103:第1の予測モード及び第2の予測モードをそれぞれ用いて、第1のサブブロックのための第1の予測値及び第2のサブブロックのための第2の予測値を生成する。
【0167】
S104:S101において開示されている分割に従って、第1の予測値及び第2の予測値の組み合わせによる予測サンプルの組み合わせ値を取得する。
【0168】
一例として、より具体的には、ステップS104は、以下を含む。
S104-1:現在のブロック内のルマサンプルに関して、サンプル距離(sample_dist)が計算され、サンプル距離は、S101において決定された現在のブロックの分離線に対するルマサンプルの距離を表す。
【0169】
一例において、サンプル距離sample_distは、以下の式に従って計算される。
sample_dist=((x<<1)+1)*Dis[angleIdx1]+((y<<1)+1))*Dis[angleIdx2]-offset(distanceIdx)。
●angleIdx1及びangleIdx2は、ステップS101において角度インデックスとして、ビットストリームから取得され、又は、ビットストリームから取得された他の情報に基づいて導出され、例えば、要素シンタックスgeo_partition_idxに基づいて導出され、angleIdx1及びangleIdx2は、分離線の量子化三角パラメータを表す。
●x及びyは、現在のブロックの左上サンプルに関するサンプルの水平距離及び垂直距離である。
●offset(distanceIdx)は、インデックス値(distanceIdx)の関数であり、このインデックス値は、ステップS101において距離インデックスとして、ビットストリームから取得され、又は、ビットストリームから取得された他の情報に基づいて導出され、例えば、要素シンタックスgeo_partition_idxに基づいて導出される。
●Dis[]は、予め定義されたルックアップテーブルである。
【0170】
別の例において、sample_dist及びsampleWeight1は、以下の式に従って取得できる。
- nCbR=(W>H)?(W/H):(H/W)
- sample_dist=(W>H)?(Clip3(0,8,(x/nCbR-y)+4)):(Clip3(0,8,(x-y/nCbR)+4))、
又は、
sample_dist=(W>H)?(Clip3(0,8,(H-1-x/nCbR-y)+4)):(Clip3(0,8,(W-1-x-y/nCbR)+4))。
Wは現在のブロックの幅であり、Hは現在のブロックの高さである。
【0171】
上記2つの例は、整数演算に従う2つの計算方法を示していることに留意されたい。本発明の実施形態は、sample_distの計算のこれらの例に限定されるものではない。
【0172】
一例において、sample_distは、(x,y)に位置するサンプルと分離線との間の直交線距離とすることができる。別の例において、(x,y)に位置するサンプルを通る水平線又は垂直線を作成する。水平線又は垂直線は、分離線との交点を有する。sample_distは、(x,y)に位置するサンプルと交点との間の距離とすることができる。
【0173】
S104-2:ブレンディング演算は、sample_distを入力とし、sampleWeight1又はsampleWeight2を出力とする関数として実装される。
【0174】
sample_distは、重み付け係数を計算するのに使用され、重み付け係数は、第1のサブブロック及び第2のサブブロックそれぞれに対応する第1の予測値及び第2の予測値を組み合せることによって導出される組み合わせ予測値に使用される。一例において、重み付け係数は、第1の予測値及び第2の予測値それぞれに対応する重み値を参照して、sampleWeight1及びsampleWeight2として示される。一例において、sampleWeight1は、sample_distに従って計算され、sampleWeight2は、式sampleWeight2=T-sampleWeight1に従って計算され、Tは予め定義された定数である。1つの例において、予め定義された定数Tは、8に等しく、これは、sampleWeight1及びsampleWeight2が、0~8の値範囲(0~8を含む)内の値を有することができることを意味する。別の例において、予め定義された定数Tは、16に等しい。
【0175】
1つの例によれば、第1の重み付け係数sampleWeight1は、sample_dist及びルックアップテーブルに従って取得される。一例において、ルックアップテーブルは、フィルタ係数を保存するのに使用される。換言すれば、ブレンディング演算は、ルックアップテーブルに従って実装される。そのような一例において、sample_distの関数は、ルックアップテーブルのためのインデックス値として使用することができる。上記関数は、定数演算を伴う除算もしくは乗算、定量演算を伴う右シフト、絶対値もしくはクリッピング演算又はこれらの組み合わせの実施とすることができる。
【0176】
ブレンディング演算は、ビットストリーム内のインジケーションの値に従ってサンプルに、又は、ビットストリーム内のインジケーションの値に従ってサンプルに適用される。
【0177】
一例において、sampleWeight1=Clip3(0,8,f(sample_dist))である。関数f()は、定数演算を伴う除算/加算/乗算、定量演算を伴う右シフト、絶対値演算もしくはクリッピング演算又はこれらの組み合わせの実施とすることができる。
【0178】
一例において、sampleWeight1(又はsampleWeight2)=Clip3(0,8,sample_dist)である。
一例において、sampleWeight1(又はsampleWeight2)=Clip3(0,8,sample_dist+4)である。
一例において、sampleWeight1(又はsampleWeight2)=sample_dist==4?4:sample_dist<4?0:8である。
一例において、sampleWeight1(又はsampleWeight2)=Clip3(0,8,(sample_dist-4)*K+sample_dist)である。
一例において、sampleWeight1(又はsampleWeight2)=sample_dist==0?4:sample_dist<0?0:8である。
一例において、sampleWeight1(又はsampleWeight2)=Clip3(0,8,sample_dist*K+Clip3(0,8,sample_dist+4))であり、Kは0よりも大きい値の整数である。ブレンディング演算は、Kが増加するにつれて短く(したがってシャープに)なることに留意されたい。例えば、K=4である場合、第2のブレンディング演算は、
図16において例示されている「sampleWeight=sample_dist==0?4:sample_dist<0?0:8」と同一になる。1つの例によれば、ビットストリーム内のインジケータの値は、Kの値を示す。
【0179】
一例において、ブレンディング演算は、
図17に例示されているテーブル等のルックアップテーブルとして実装できる。一例において、sampleWeightは、geoFilter[idx]として取得でき、ここで、idxは、sampleDistの関数として取得され、geoFilterは、フィルタ重みの一次元線形アレイである。一例として、idx=min((abs(sample_dist)+8)>>4,maxIdx)であり、maxIdxは、idxが取り得る最大値である。
【0180】
S105:ステップS101において開示されている除算に従うとともにステップ104において開示されている組み合わせ方法に従って、現在のブロックの予測モード情報(例えば、動きベクトルを含む動き情報又はイントラ予測情報)を保存する。
【0181】
具体的には、GEO予測モードのためのデコーディング処理の第1の実施形態において、
この処理は、MergeTriangleFlag[xCb][yCb]が1に等しい状態で又はgeo_flag[xCb][yCb]が1に等しい状態でコーディングユニットをデコードする場合に呼び出される。
【0182】
この処理への入力は、以下のものである。
- 現在のピクチャの左上ルマサンプルに対する現在のコーディングブロックの左上サンプルを指定するルマ位置(xCb,yCb)、
- ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth、
- ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight、
- 1/16分数サンプル確度におけるルマ動きベクトルmvA及びmvB、
- クロマ動きベクトルmvCA及びmvCB、
- 参照インデックスrefIdxA及びrefIdxB、
- 予測リストフラグpredListFlagA及びpredListFlagB。
【0183】
この処理の出力は、以下のものである。
- ルマ予測サンプルの(cbWidth)×(cbHeight)アレイpredSamplesL、
- 成分Cbのためのクロマ予測サンプルの(cbWidth/2)×(cbHeight/2)アレイpredSamplesCb、
- 成分Crのためのクロマ予測サンプルの(cbWidth/2)×(cbHeight/2)アレイpredSamplesCr。
【0184】
predSamplesLAL及びpredSamplesLBLを、予測されるルマサンプル値の(cbWidth)×(cbHeight)アレイとし、predSamplesLACb、predSamplesLBCb、predSamplesLACr、及びpredSamplesLBCrを、予測されるクロマサンプル値の(cbWidth/2)×(cbHeight/2)アレイとする。
【0185】
predSamplesL、predSamplesCb、及びpredSamplesCrは、以下の順序付けられたステップによって導出される。
【0186】
1.NがA及びBのそれぞれである場合、以下が適用される。
- ルマサンプルの順序付けられた二次元アレイrefPicLNL及びクロマサンプルの2つの順序付けられた二次元アレイrefPicLNCb及びrefPicLNCrからなる参照ピクチャは、predListFlagNに等しく設定されたX、及びrefIdxNに等しく設定されたrefIdxXを入力として、導出される。
- アレイpredSamplesLNLは、ルマ位置(xCb,yCb)、cbWidthに等しく設定されたルマコーディングブロック幅sbWidth、cbHeightに等しく設定されたルマコーディングブロック高さsbHeight、(0,0)に等しく設定された動きベクトルオフセットmvOffset、mvNに等しく設定された動きベクトルmvLX、refPicLNLに等しく設定された参照アレイrefPicLXL、FALSEに等しく設定された変数bdofFlag、及び0に等しく設定された変数cIdxを入力として、導出される。
- アレイpredSamplesLNCbは、ルマ位置(xCb,yCb)、cbWidth/2に等しく設定されたコーディングブロック幅sbWidth、cbHeight/2に等しく設定されたコーディングブロック高さsbHeight、(0,0)に等しく設定された動きベクトルオフセットmvOffset、mvCNに等しく設定された動きベクトルmvLX、refPicLNCbに等しく設定された参照アレイrefPicLXCb、FALSEに等しく設定された変数bdofFlag、及び1に等しく設定された変数cIdxを入力として、導出される。
- アレイpredSamplesLNCrは、ルマ位置(xCb,yCb)、cbWidth/2に等しく設定されたコーディングブロック幅sbWidth、cbHeight/2に等しく設定されたコーディングブロック高さsbHeight、(0,0)に等しく設定された動きベクトルオフセットmvOffset、mvCNに等しく設定された動きベクトルmvLX、refPicLNCrに等しく設定された参照アレイrefPicLXCr、FALSEに等しく設定された変数bdofFlag、及び2に等しく設定された変数cIdxを入力として、導出される。
2.geo_flag[xCb][yCb]が1に等しい場合、幾何学的区分化に関連する変数angleIdx及びdistanceIdxは、表1において指定されているようにgeo_partitioning_idx[xCb][yCb]の値に従って設定される。
a.幾何学的区分化マージモードのためのサンプル重み導出処理が呼び出される。この処理への入力は、それぞれ(cbWidth)×(cbHeight)、(cbWidth/2)×(cbHeight/2)、及び(cbWidth/4)×(cbHeight/4)のサイズの3つの順序付けられたアレイsampleWeightL、sampleWeightC、及びmotionWeight、並びに、変数angleIdx、distanceIdx、cbWidth、及びcbHeightである。
b.現在のルマコーディングブロック内の予測サンプル、すなわち、xL=0..cbWidth-1であり、yL=0..cbHeight-1であるpredSamplesL[xL][yL]は、cbWidthに等しく設定されたコーディングブロック幅nCbW、cbHeightに等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLAL、predSamplesLBL、predWeightL、及び0に等しいcIdxを入力として、幾何学的区分化マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
c.現在のクロマ成分Cbコーディングブロック内の予測サンプル、すなわち、xC=0..cbWidth/2-1であり、yC=0..cbHeight/2-1であるpredSamplesCb[xC][yC]は、cbWidth/2に等しく設定されたコーディングブロック幅nCbW、cbHeight/2に等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLACb、predSamplesLBCb、predWeightC、及び1に等しいcIdxを入力として、幾何学的区分化マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
d.現在のクロマ成分Crコーディングブロック内の予測サンプル、すなわち、xC=0..cbWidth/2-1であり、yC=0..cbHeight/2-1であるpredSamplesCr[xC][yC]は、cbWidth/2に等しく設定されたコーディングブロック幅nCbW、cbHeight/2に等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLACr、predSamplesLBCr、predWeightC、及び2に等しいcIdxを入力として、幾何学的区分化マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
e.幾何学的マージモードのための動きベクトル保存処理は、ルマコーディングブロック位置(xCb,yCb)、ルマコーディングブロック幅cbWidth、ルマコーディングブロック高さcbHeight、サンプルアレイmotionWeight、ルマ動きベクトルmvA及びmvB、参照インデックスrefIdxA及びrefIdxB、並びに予測リストフラグpredListFlagA及びpredListFlagBを入力として、呼び出される。
【0187】
[三角形マージモードのための参照ピクチャマッピング処理]
この処理への入力は、以下のものである。
- 参照リストが0又は1に等しいことを表す変数X、
- 参照インデックスrefIdxN。
この処理の出力は、以下のものである。
- 参照インデックスrefIdxTemp。
【0188】
変数refPicPocは、以下の通りに導出される。
refPicPoc=(X==0) ? RefPicList[0][refIdxN] : RefPicList[1][refIdxN] (8-878)
【0189】
参照ピクチャリストrefPicListTempは、以下の通りに導出される。
refPicListTemp=(X==0) ? RefPicList[1] : RefPicList[0] (8-879)
【0190】
変数refIdxTempは、以下の通りに導出される。
- 変数mapStopは、FALSEに等しく設定される。
- m=0..NumRefIdxActive[1]-1である変数refIdxmに関して、mapStopがFALSEに等しくなるまで、以下が適用される。
refIdxTemp=(refPicListTemp[refIdxm]==refPicPoc) ? refIdxm : -1 (8-880)
mapStop=(refIdxTemp!=-1) ? TRUE : FALSE (8-881)
【0191】
[幾何学的区分化マージモードのためのサンプル重み導出処理]
この処理への入力は、以下のものである。
- 現在のコーディングブロックの幅及び高さを指定する2つの変数nCbW及びnCbH、
- 現在の幾何学的区分化モードの角度及び距離ルックアップ値を指定する2つの変数angleIdx及びdistanceIdx、
- (nCbW)×(nCbH)アレイsampleWeightL、
- (nCbW/2)×(nCbH/2)アレイsampleWeightC、
- (nCbW/4)×(nCbH/4)アレイmotionWeight。
【0192】
この処理の出力は、0...8の範囲を有するサンプル当たりの重み値の同じ3つのアレイsampleWeightL、sampleWeightC、及びmotionWeightである。
1.現在の幾何学的区分化モードのためにsampleWeightLに保存されるルマブレンディング重みは、以下の通りに導出される。
【0193】
以下の変数の値が設定される。
- wIdxは、log2(nCbW)-3に設定され、
- hIdxは、log2(nCbH)-3に設定され、
- stepOffsetは、64に設定され、
- 以下の変数は、(wIdx>=hIdx)の比較に従って設定され、
- whRratio=(wIdx>=hIdx) ? wIdx-hIdx:hIdx-wIdx (8-882)
- wIsLargerH=(wIdx>=hIdx)?true:false (8-883)
- scaleStep=(wIdx>=hIdx) ? (1<<hIdx):(1<<wIdx) (8-884)
- displacementXは、angleIdxに設定され、
- displacementYは、(displacementX+8)%32に設定され、
- angleNは、
angleN=angleIdx if angleIdx>=0&&angleIdx<=8、
angleN=16-angleIdx if angleIdx>8&&angleIdx<=16、
angleN=angleIdx-16 if angleIdx>16&&angleIdx<=24、
angleN=32-angleIdx otherwise、
に設定され、
- さらに、angleNは、wIsLargerHに依拠して、以下の値に設定され、
angleN=(wIsLargerH)?8-angleN:angleN
- stepDisは、表2において指定されているようなwhRatio及びangleNの値に従って設定され、さらに以下であり、
stepSize=stepDis+stepOffset
- rhoは、表3において指定されているDisとして示されているルックアップテーブルを用いて以下の値に設定される。
- rho=distanceIdx*stepSize*scaleStep+nCbW*Dis[displacementX]+nCbH*Dis[displacementY]。 (8-885)。
各サンプル位置x=0...nCbW-1及びy=0...nCbH-1に関して、sampleWeightL[x][y]の値は、以下のようにして導出される。
- 距離distFromLineは、以下の通りに表3において指定されているDisとして示されているルックアップテーブルを用いて計算される。
- distFromLine=((x<<1)+1)*Dis[displacementX]+((y<<1)+1))*Dis[displacementY]-rho。 (8-886)
- スケーリングされた距離distScaledは、以下として導出される。
- distScaled=min((abs(distFromLine)+8)>>4,14) (8-887)
【0194】
sampleWeightL[x][y]の値は、以下のように表4において指定されているGeoFilterとして示されているフィルタ重みルックアップテーブルに従って設定される。
sampleWeightL[x][y]=GeoFilter[distScaled] if distFromLine<=0
sampleWeightL[x][y]=8-GeoFilter[distScaled] if distFromLine>0
【0195】
2.現在の幾何学的区分化モードのためにsampleWeightCに保存されているクロマ重みは、以下の通りに導出される。
各サンプル位置x=0...(nCbW/2)-1及びy=0...(nCbH/2)-1に関して、sampleWeightC[x][y]の値は、以下のようにして導出される。
sampleWeightC[x][y]=sampleWeightL[(x<<1)][(y<<1)]
【0196】
3.現在の幾何学的区分化モードのためにアレイmotionWeightに保存される動きの重みは、以下の通りに導出される。
- 以下の変数が設定される。
threshScaler=((log2(nCbW)+log2(nCbH))>>1)-1
threshLower=32>>threshScaler
threshUpper=32-threshLower
各サンプル位置x=0...(nCbW/4)-1及びy=0...(nCbH/4)-1について、motionWeight[x][y]の値は、以下のようにして導出される。
Cnt=sampleWeightL[(x<<2)][(y<<2)]
+sampleWeightL[(x<<2)+3][(y<<2)]
+sampleWeightL[(x<<2)][(y<<2)+3]
+sampleWeightL[(x<<2)+3][(y<<2)+3]
【0197】
motionWeight[x][y]の値は、以下に設定される。
motionWeight[x][y]=0, if Cnt<=threshLower
motionWeight[x][y]=1, if Cnt>=threshUpper
motionWeight[x][y]=2, otherwise
【0198】
[幾何学的区分化マージモードのための重み付けられたサンプル予測処理]
この処理への入力は、以下のものである。
- 現在のコーディングブロックの幅及び高さを指定する2つの変数nCbW及びnCbH、
- 2つの(nCbW)×(nCbH)アレイpredSamplesLA及びpredSamplesLB、
- (nCbW)×(nCbH)アレイsampleWeight、
- 色成分インデックスを指定する変数cIdx。
【0199】
この処理の出力は、予測サンプル値の(nCbW)×(nCbH)アレイpbSamplesである。
【0200】
変数bitDepthは、以下の通りに導出される。
- cIdxが0に等しい場合、bitDepthは、BitDepthYに等しく設定される。
- そうでなければ、bitDepthは、BitDepthCに等しく設定される。
【0201】
変数shift1及びoffset1は、以下の通りに導出される。
- 変数shift1は、Max(5,17-bitDepth)に等しく設定される。
- 変数offset1は、1<<(shift1-1)に等しく設定される。
【0202】
予測サンプル値は、以下の通りに導出される。
pbSamples[x][y]=
Clip3(0,(1<<bitDepth)-1,
(predSamplesLA[x][y]*sampleWeight[x][y]
+predSamplesLB[x][y]*(8-sampleWeight[x][y])+offset1)>>shift1)
【0203】
[幾何学的区分化マージモードのための動きベクトル保存]
この処理は、geo_flag[xCb][yCb]が1に等しい状態でコーディングユニットをデコードする場合に呼び出される。
【0204】
この処理への入力は、以下のものである。
- 現在のピクチャの左上ルマサンプルに対する現在のコーディングブロックの左上サンプルを指定するルマ位置(xCb,yCb)、
- ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth、
- ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight、
- 動きアサインメントインデックスを含む(cbWidth/4)×(cbHeight/4)のサイズのアレイmotionWeight
- 1/16分数サンプル確度でのルマ動きベクトルmvA及びmvB、
- 参照インデックスrefIdxA及びrefIdxB、
- 予測リストフラグpredListFlagA及びpredListFlagB。
【0205】
水平及び垂直方向における現在のコーディングブロック内の4×4ブロックの数を指定する変数numSbX及びnumSbYは、numSbX=cbWidth>>2及びnumSbY=cbHeight>>2に等しく設定される。
【0206】
変数minSbは、min(numSbX,numSbY)に等しく設定される。
【0207】
変数refIdxTempAは、predListFlagAに等しく設定されたX、及びrefIdxAに等しく設定されたrefIdxNを入力として、三角形マージモードのための参照ピクチャマッピング処理を呼び出すことによって導出される。
【0208】
変数refIdxTempBは、predListFlagBに等しく設定されたX、及びrefIdxBに等しく設定されたrefIdxNを入力として、三角形マージモードのための参照ピクチャマッピング処理を呼び出すことによって導出される。
【0209】
xSbIdx=0..numSbX-1であり、ySbIdx=0..numSbY-1であるサブブロックインデックス(xSbIdx,ySbIdx)における各4×4サブブロックに関して、以下が適用される。
- motionWeight[xSbIdx][ySbIdx]が0に等しい場合、以下が適用される。
predFlagL0=(predListFlagA==0) ? 1 : 0 (8-888)
predFlagL1=(predListFlagA==0) ? 0 : 1 (8-889)
refIdxL0=(predListFlagA==0) ? refIdxA : -1 (8-890)
refIdxL1=(predListFlagA==0) ? -1 : refIdxA (8-891)
mvL0[0]=(predListFlagA==0) ? mvA[0] : 0 (8-892)
mvL0[1]=(predListFlagA==0) ? mvA[1] : 0 (8-893)
mvL1[0]=(predListFlagA==0) ? 0 : mvA[0] (8-894)
mvL1[1]=(predListFlagA==0) ? 0 : mvA[1] (8-895)
- そうでなければ、motionWeight[xSbIdx][ySbIdx]が1に等しい場合、以下が適用される。
predFlagL0=(predListFlagB==0) ? 1 : 0 (8-896)
predFlagL1=(predListFlagB==0) ? 0 : 1 (8-897)
refIdxL0=(predListFlagB==0) ? refIdxB : -1 (8-898)
refIdxL1=(predListFlagB==0) ? -1 : refIdxB (8-899)
mvL0[0]=(predListFlagB==0) ? mvB[0] : 0 (8-900)
mvL0[1]=(predListFlagB==0) ? mvB[1] : 0 (8-901)
mvL1[0]=(predListFlagB==0) ? 0 : mvB[0] (8-902)
mvL1[1]=(predListFlagB==0) ? 0 : mvB[1] (8-903)
- そうでなければ(motionWeight[xSbIdx][ySbIdx]が2に等しい)、以下が適用される。
- predListFlagA+predListFlagBが1に等しい場合、
predFlagL0=1 (8-904)
predFlagL1=1 (8-905)
refIdxL0=(predListFlagA==0) ? refIdxA : refIdxB (8-906)
refIdxL1=(predListFlagA==0) ? refIdxB : refIdxA (8-907)
mvL0[0]=(predListFlagA==0) ? mvA[0] : mvB[0] (8-908)
mvL0[1]=(predListFlagA==0) ? mvA[1] : mvB[1] (8-909)
mvL1[0]=(predListFlagA==0) ? mvB[0] : mvA[0] (8-910)
mvL1[1]=(predListFlagA==0) ? mvB[1] : mvA[1] (8-911)
- predListFlagA+predListFlagBが0に等しい場合、以下が適用される。
predFlagL0=1 (8-912)
predFlagL1=(refIdxTempA==-1&&refIdxTempB==-1) ? 0 : 1 (8-913)
refIdxL0=(refIdxTempB!=-1) ? refIdxA : (8-914)
((refIdxTempA!=-1) ? refIdxB : refIdxA)
refIdxL1=(refIdxTempB!=-1) ? refIdxTempB : (8-915)
((refIdxTempA!=-1) ? refIdxTempA : -1)
mvL0[0]=(refIdxTempB!=-1) ? mvA[0] : (8-916)
((refIdxTempA!=-1) ? mvB[0] : mvA[0])
mvL0[1]=(refIdxTempB!=-1) ? mvA[1] : (8-917)
((refIdxTempA!=-1) ? mvB[1] : mvA[1])
mvL1[0]=(refIdxTempB!=-1) ? mvB[0] : (8-918)
((refIdxTempA!=-1) ? mvA[0] : 0)
mvL1[1]=(refIdxTempB!=-1) ? mvB[1] : (8-919)
((refIdxTempA!=-1) ? mvA[1] : 0)
- predListFlagA+predListFlagBが2に等しい場合、以下が適用される。
predFlagL0=(refIdxTempA==-1 && refIdxTempB==-1) ? 0 : 1 (8-920)
predFlagL1=1 (8-921)
refIdxL0=(refIdxTempB!=-1) ? refIdxTempB : (8-922)
((refIdxTempA!=-1) ? refIdxTempA : -1)
refIdxL1=(refIdxTempB!=-1) ? refIdxA : (8-923)
((refIdxTempA!=-1) ? refIdxB : refIdxA)
mvL0[0]=(refIdxTempB!=-1) ? mvB[0] : (8-924)
((refIdxTempA!=-1) ? mvA[0] : 0)
mvL0[1]=(refIdxTempB!=-1) ? mvB[1] : (8-925)
((refIdxTempA!=-1) ? mvA[1] : 0)
mvL1[0]=(refIdxTempB!=-1) ? mvA[0] : (8-926)
((refIdxTempA!=-1) ? mvB[0] : mvA[0])
mvL1[1]=(refIdxTempB!=-1) ? mvA[1] : (8-927)
((refIdxTempA!=-1) ? mvB[1] : mvA[1])
- x=0..3であり、y=0..3である場合に、以下のアサインメントが行われる。
MvL0[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=mvL0(8-928)
MvL1[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=mvL1(8-929)
RefIdxL0[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=refIdxL0(8-930)
RedIdxL1[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=refIdxL1(8-931)
PredFlagL0[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=predFlagL0(8-932)
PredFlagL1[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=predFlagL1(8-933)
【表1】
【表2】
【表3】
【表4】
【0210】
GEO予測モードのためのデコーディング処理の第2の実施形態において、動き情報保存処理は以下のものである。
【0211】
コーディングブロックをKの動き保存ユニットに細分割する。一例において、コーディングブロックのサイズは、M×Nルマサンプルであり、各動き保存ユニットは、(M/K)×(N/K)の同じサイズのルマサンプルを有する。一例において、Kの値は4であり、Mの値は16であり、Nの値は16であり、この例において、各動き保存ユニットは、4×4のサイズのルマサブブロックに関連付けられている。コーディングブロックの左上ルマ位置(x,y)は、動き保存ブロックの左上位置(x/K,y/K)に関連付けられている。
【0212】
動き保存ユニットに関して、第1のサンプル重み又は第2のサンプル重みに従って、第1の片予測動き情報が保存されるのか、第2の片予測動き情報が保存されるのか、又は双予測動き情報が保存されるのかを決定する。一例において、決定は、分割境界に対する動き保存ユニット内のサンプルの距離に従う。サンプルは、整数サンプル又は分数サンプルとすることができる。分離線は、幾何学的区分モードの分割線として定義される。1つの例によれば、Kは、4(ルマサンプルに関する動き保存ユニットの幅及び高さ)に等しい。コーディングブロックを動き保存ユニットに分割する一例が、
図13に示されている。
【0213】
1つの例によれば、サンプルと分割境界との間の距離は、以下の通りに計算できる。ブロック内のルマサンプルに関して、サンプル距離(sample_dist)が計算され、サンプル距離は、ブロックの分離線に対するルマサンプルの距離を表す。
【0214】
一例において、サンプル距離sample_distは、以下の式に従って計算される。
sample_dist=((x<<1)+1)*Dis[angleIdx1]+((y<<1)+1))*Dis[angleIdx2]-offset(distanceIdx)
●angleIdx1の値及びangleIdx2の値は、ビットストリームから取得され、又はビットストリームから取得された他の情報に基づいて導出/計算され、angleIdx1及びangleIdx2は、分離線の量子化された三角パラメータを表し、1つ目の三角パラメータのタイプはコサインであり、2つ目の三角パラメータのタイプはサインである。
●x及びyは、コーディングブロックの左上サンプルに対するサンプルの-x及び-y座標である。
●offset(distanceIdx)は、インデックス値(distanceIdx)の関数であるオフセット値であり、インデックス値は、ビットストリームから取得され、又は、ビットストリームから取得された他の情報に基づいて導出/計算される。
●Dis[]は、ルックアップテーブルである。Dis[angleIdx1]は、上記サンプルの-x座標における単位増加(値1の増加に対するサンプル距離(sample_dist)の変化を表す。Dis[angleIdx2]は、上記サンプルの-y座標における単位増加(値1の増加)に関するサンプル距離(sample_dist)の変化を表す。
【0215】
上述の例のコーディネータは、の左上位置に従わず、現在のコーディングブロックの左上位置に従うことに留意されたい上述の例は、整数演算に従う計算の方法を示すことに留意されたい。本発明の実施形態は、sample_distの計算のこれらの例に限定されるものではない。
【0216】
上記例によれば、サンプルコーディネータは、1ビット左シフトされる((x<<1),(y<<1))ことに留意されたい。この例において、距離計算は、整数演算のために1/2サンプル精度まで実行でき、例えば、(0.5,0.5)におけるサンプル位置を計算できる。
【0217】
図18は、整数位置及び半画素位置(分数位置、分割境界、及びサンプルと分割境界との間の距離(sample_dist))を伴う4×4動き保存例を示している
【0218】
一例において、決定は、Mv0の符号が付けられた第1の片予測動き情報を保存するのか、Mv1の符号が付けられた第2の片予測動き情報を保存するのか、又は、Mv2の符号が付けられた、双予測動き情報等の組み合わせ動き情報を保存するのかを指し、以下のステップに従って実施される。一例において、決定は、1つの動き保存ユニットについて実行され、別の例において、決定は、コーディングブロックに含まれる少なくとも2つの(又は全ての)動き保存ユニットについて実行される。動き保存ユニットの左上座標は、(x/K,y/K)によって与えられ、動き保存ユニットの幅及び高さは、ルマサンプルに関してKで与えられる。
【0219】
計算された距離sample_distが閾値よりも小さい及び/又は閾値に等しい場合、組み合わせ動き情報(Mv2)が、動き保存ユニットに関して保存される。閾値は、定数とすることができ、分割線の角度、現在のコーディングブロックのアスペクトレイシャル(aspect racial)又は他のパラメータに基づいて適応的に導出できる。そうでなければ(距離sample_distが閾値よりも大きい又は/及び閾値に等しい場合)、sample_distの符号がチェックされる。
【0220】
sample_distが負(又は正)である場合、MV0(又はMV1)が、現在の動き保存ユニットに関して保存される。
そうでなければ(sample_distが正(又は負)である)、MV1(又はMV0)が、現在の動き保存ユニットに関して保存される。
【0221】
図19は、言及した方法に基づく動き保存の1つの例を示している。
【0222】
他の動き保存方法に比較して、この方法は、動き保存ユニット毎に1つのサンプル距離を計算するだけでよく、計算の複雑性が低減される。
【0223】
図20に示すように、GEO予測モードのためのデコーディング処理の第3の実施形態において、以下のとおりである。
【0224】
双予測を可能にするビデオコーディング技術に関して、2つの参照フレームリスト、例えば、List0及びList1、又は前方参照フレームリスト及び後方参照フレームリストが使用される。一例として、動き情報は、以下を含む。
(1)予測フラグL0(PFL0)及び予測フラグL1(PFL1)。予測フラグL0は真であり、List0がインター予測において使用され、そうでなければ(予測フラグL0が偽である)、List0は使用されない。予測フラグL1も同様である。
(2)参照インデックスL0(RIL0)及び参照インデックスL1(RIL1)。参照インデックスL0は、List0からのどの参照フレーム(候補)が現在の参照フレームとして使用されるかを示すために使用される。参照インデックスL1も同様である。また、実現可能な実装において、-1に等しい参照インデックスL0は、List0からの参照フレームが使用されないことを意味する。
(3)動きベクトルL0(MVL0)及び動きベクトルL1(MVL1)は、List0及びList1それぞれに対応し、それらの両方は、水平成分及び垂直成分を有する。
【0225】
現在のブロックについて動き情報が決定された後、実現可能な実装において、動き情報は、将来のコーディングブロックの予測処理のための参照情報として、例えば、空間的な予測又は時間的予測における隣接ブロックの予測動き情報として保存及び使用されてよい。
【0226】
動き情報は、メモリに保存され、より具体的には、この実施形態では動き情報保存ユニットに保存される。
【0227】
現在のブロックは、複数のサンプルセットに分割されよく、複数のサンプルセットのそれぞれは、サンプルセットと同じサイズを有するか、又は、現在のブロックをサンプルセットとして設定する。例えば、サンプルセットは、4×4サンプルアレイとしてよい。サンプルセットのサイズは、8×8、16×16、8×16等であってもよく、これは限定されるものではない。複数のサンプルセットのそれぞれは、各動き情報保存ユニットに対応し、したがってサンプルセットの動き情報は、対応する動き情報保存ユニットに保存される。「サンプルセットの動き情報」に関して2つのケースがあることに留意されたい。ケース1:動き情報が、サンプルセットの予測値を決定するために使用される。ケース2:動き情報が、保存するためにサンプルセットにアサインされる。
【0228】
また、本実施形態において、サンプルセットは、ルマサンプルセットであり、他の実施形態において、サンプルセットは、クロマサンプルセットであってよい。
【0229】
GEO予測モードは、上記セクションにおいて紹介されている。一般に、GEO予測では、現在のブロックは、第1のサブブロック及び第2のサブブロックからなり、第1のサブブロック及び第2のサブブロックは、共通の境界によって分離され、第1のサブブロックは、第1の動き情報に対応し、第2のサブブロックは、第2の動き情報に対応する。第1のサブブロック及び第2のサブブロックは、三角形区分、台形区分、又は非対称矩形区分等であってよく、これは限定されるものではない。また、例えば、三角形区分において、各サブブロックは三角形ブロックであることが理解され得る。
【0230】
一例として、本実施形態において、第1の動き情報及び第2の動き情報の両方が片予測に由来する。第1の動き情報は、RIL0,MVL0のみを含んでよく、これはPFL0=1,PFL1=0を意味し、又は、RIL1,MVL1のみを含んでよく、これはPFL0=0,PFL1=1を意味し、同様に、第2の動き情報は、RIL0,MVL0のみを含んでよく、これはPFL0=1,PFL1=0を意味し、又は、RIL1,MVL1のみを含んでよく、これはPFL0=0,PFL1=1を意味する。
【0231】
S201:角度パラメータ及び距離パラメータを決定する。
【0232】
共通の境界は、角度パラメータ及び距離パラメータによって決定される。
【0233】
(1)デコーダでは、
実現可能な実装において、ビットストリームから直接、角度パラメータ及び距離パラメータをパースする。
【0234】
別の実現可能な実装において、ビットストリームからインジケータをパースし、インジケータに基づいて角度パラメータ及び距離パラメータを取得する。インジケータは、インデックスとすることができ、角度パラメータ及び距離パラメータは、そのようなインデックスを用いてルックアップテーブルをチェックすることによって決定できる。又は、角度パラメータ及び距離パラメータは、関数によって計算でき、インジケータは、関数の入力である。
【0235】
別の実現可能な実装において、ビットストリームから2つのインジケータをパースし、2つのインジケータのうちの一方から角度パラメータを、2つのインジケータのうちの他方から距離パラメータを取得する。
【0236】
本実施形態において、シンタックス要素「geo_partition_idx」は、ビットストリームからパースされる。角度パラメータ「angleIdx」及び距離パラメータ「distanceIdx」は、「geo_partition_idx」と「angleIdx」及び「distanceIdx」のペアとの間の関係を定義するルックアップテーブルを検索することによって取得される。ルックアップテーブルは、例えば、表1としてよい。
【0237】
S202:角度パラメータに基づいて第1の計算パラメータを決定し、角度パラメータに基づいてtemp角度パラメータを計算し、temp角度パラメータに基づいて第2の計算パラメータを決定し、角度パラメータ及び距離パラメータに基づいて第3の計算パラメータを計算する。
【0238】
第1の計算パラメータは、角度パラメータに従って、予め設定されたルックアップテーブルをチェックすることによって決定され、第2の計算パラメータは、temp角度パラメータに従って、ルックアップテーブルをチェックすることによって決定され、第1の計算パラメータ及び第2の計算パラメータは、それぞれ同じ角度のコサイン値及びサイン値である。コサイン及びサイン計算は、ルックアップテーブル法によってシミュレート及び置換でき、コンピューティングの複雑性が低減されることが理解され得る。
【0239】
本実施形態では、
実現可能な実装において、第1の計算パラメータは、Dis[angleIdx]に設定され、Dis[]は、ルックアップテーブルであり、例えば、表3としてよい。
【0240】
temp角度パラメータは、(angleIdx+8)%32に設定され、TempIdxとして仮定する。
【0241】
第2の計算パラメータは、Dis[TempIdx]に設定される。
【0242】
理論上、Dis[angleIdx]及びDis[TempIdx]は、同じ角度の概算コサイン値及びサイン値であり、角度は、共通の境界と現在のブロックとの間の幾何学的関係を表すことに留意されたい。
【0243】
別の実現可能な実装において、第1の計算パラメータは、Dis1[angleIdx]に設定され、Dis1[]は、ルックアップテーブルであり、例えば、表3としてよい。
【0244】
第2の計算パラメータは、Dis2[angleIdx]に設定され、Dis2[]は、別のルックアップテーブルである。
【0245】
Dis1[angleIdx]及びDis2[angleIdx]は、同じ角度の概算コサイン値及びサイン値であり、角度は、共通の境界と現在のブロックとの間の幾何学的関係を表すことに留意されたい。
【0246】
第3の計算パラメータは、以下の通りに取得される。
wIdxは、log2(nCbW)-3に設定され、nCbWは、現在のブロックの幅であり、
hIdxは、log2(nCbH)-3に設定され、nCbHは、現在のブロックの高さであり、
stepOffsetは、正の整数に設定され、例えば、64に設定される。
【0247】
wIdx及びhIdxを比較する。
whRratio=(wIdx>=hIdx)?wIdx-hIdx:hIdx-wIdx
wIsLargerH=(wIdx>=hIdx)?true:false
scaleStep=(wIdx>=hIdx)?(1<<hIdx):(1<<wIdx)
【0248】
別の実現可能な実装において、以下が理解され得る。
whRratio=(wIdx>hIdx)?wIdx-hIdx:hIdx-wIdx
wIsLargerH=(wIdx>hIdx)?true:false
scaleStep=(wIdx>hIdx)?(1<<hIdx):(1<<wIdx)
angleNは、以下に設定される。
angleN=angleIdx if angleIdx>=0&&angleIdx<=8,
angleN=16-angleIdx if angleIdx>8&&angleIdx<=16,
angleN=angleIdx-16 if angleIdx>16&&angleIdx<=24,
angleN=32-angleIdx otherwise。
【0249】
異なる実装において、エンドポイントangleIdx0、8、16、24は、例えば、異なるサブセクションに属してよいことに留意されたい。
【0250】
別の実現可能な実装において、angleNは、以下に設定される。
angleN=angleIdx if angleIdx>0&&angleIdx<8,
angleN=16-angleIdx if angleIdx>=8&&angleIdx<16,
angleN=angleIdx-16 if angleIdx>=16&&angleIdx<24,
angleN=32-angleIdx otherwise。
【0251】
さらに、angleNは、以下の値に設定される。
angleN=(wIsLargerH)?8-angleN:angleN
stepDisは、ルックアップテーブル、例えば、表2において指定されているようなwhRatio及びangleNの値に従って設定される。
stepSize=stepDis+stepOffset
【0252】
第3の計算パラメータrhoは、Disとして示されているルックアップテーブル、例えば、表3を用いて以下の値に設定される。
rho=distanceIdx*stepSize*scaleStep+nCbW*Dis[angleIdx]+nCbH*Dis[TempIdx]。
【0253】
また、対応して、別の実現可能な実装において、第3の計算パラメータrhoは、以下として設定されてよい。
rho=distanceIdx*stepSize*scaleStep+nCbW*Dis1[angleIdx]+nCbH*Dis2[angleIdx]。
【0254】
角度パラメータ及び距離パラメータが決定された後から、第1、第2、及び第3の計算パラメータを決定できることに留意されたい。実現可能な実装において、第1、第2、及び第3の計算パラメータは、現在のブロック内の全てのサンプルについてのパラメータとして一度のみ計算される。また、現在のブロックの第1、第2、及び第3の計算パラメータが既に決定されている場合、動き情報保存処理に関して、ステップS201及びS202をスキップできる。
【0255】
S203:現在のブロック内のサンプルセットと共通の境界との間の距離を決定する。
【0256】
距離は、以下によって計算される。
distFromLine=(x+K)*P1+(y+K)*P2-P3
P1、P2、及びP3は、それぞれ第1の計算パラメータ、第2の計算パラメータ、及び第3の計算パラメータであり、distFromLineは、距離を表し、Kは非負の整数であり、xは、サンプルセットにおけるターゲット位置の水平座標を表し、yは、矩形座標系におけるターゲット位置の垂直座標を表し、現在のブロックの左上サンプルの位置は、座標原点として設定され、右方向は、正の水平方向として設定され、下方向は、正の垂直方向として設定される。
【0257】
実現可能な実装において、Kは1に等しい。
distFromLine=(x+1)*P1+(y+1)*P2-P3。
【0258】
現在のブロック内のサンプルセットと共通の境界との間の距離は、一般に、サンプルセットにおけるターゲット位置と共通の境界との間の距離であることに留意されたい。
【0259】
サンプルセットにおけるターゲット位置は、予め定められている。例えば、予め定められた位置は、サンプルセットの左上位置、又はサンプルセットの中心位置、又はサンプルセットの他の位置としてよい。
【0260】
ターゲット位置は、サンプルセットにおける整数サンプル位置の位置であってよく、ターゲット位置は、分数サンプル位置の位置であってもよいことに留意されたい。例えば、ターゲット位置は、現在のブロックの重心の位置とすることができる。より具体的には、現在のブロックが4×4サンプルアレイである場合、ターゲット位置は、本実施形態の矩形座標系における座標(1.5,1.5)の位置としてよい。
【0261】
実現可能な実装において、距離のサンプル精度は、整数サンプルよりも高い。対応して、距離は、以下によって計算される。
distFromLine=((x<<N)+K)*P1+((y<<N)+K)*P2-P3
2Nは、距離のサンプル精度の逆数を表し、例えば、距離のサンプル精度が半画素精度である場合、Nは1に等しく、距離のサンプル精度が1/4画素精度である場合、Nは2に等しい。
【0262】
一例として、距離は、以下によって計算される。
distFromLine=((x<<1)+1)*Dis[angleIdx]+((y<<1)+1)*Dis[TempIdx]-rho
【0263】
S204:第3の動き情報がサンプルセットに関して保存されるか否かを決定するために、上記距離を閾値と比較する。
【0264】
第3の動き情報は、第1の動き情報及び第2の情報によって導出される。実現可能な実装において、第3の動き情報は、双予測のための動き情報と同様に、第1の動き情報及び第2の動き情報の組み合わせである。より具体的には、第1の動き情報がRILX_first,MVLX_firstを含み、第2の動き情報がRILY_second,MVLY_secondを含み、Xが0又は1であってよく、Yが0又は1であってよい場合、第3の動き情報は、RILX_first,MVLX_first,RILY_second,MVLY_second全てを含んでよく、これはPFL0=1、PFL1=1を意味する。
【0265】
別の実現可能な実装において、第1の動き情報及び第2の動き情報の両方が同じリスト(List0又はList1)に対応する場合、第3の動き情報は、第1の動き情報又は第2の動き情報のうちの一方に等しくてよい。例えば、第1及び第2の動き情報の両方について、PFL0が1に等しく、PFL1が0に等しい場合、第3の動き情報は、第1の動き情報(又は異なる実装によれば、第2の動き情報)に等しく設定されてよい。同様に、第1及び第2の動き情報の両方について、PFL0が0に等しく、PFL1が1に等しい場合、第3の動き情報は、第1の動き情報(又は異なる実装によれば、第2の動き情報)に等しく設定されてよい。
【0266】
実現可能な実装において、閾値は、予め定められた値としてよい。
【0267】
別の実現可能な実装において、閾値は、共通の境界と水平方向との間の幾何学的関係に基づく、又は、共通の境界と垂直方向との間の幾何学的関係に基づく。より具体的には、閾値は、共通の境界の直交方向と、水平方向又は垂直方向との間の角度に基づく。また、他の実装において、幾何学的関係は、共通の境界と、現在のブロックのブロック境界又は現在のブロックのサブブロックとの間の長さ関係を含んでよい。本実施形態において、閾値は、上記で計算された角度に従って、ルックアップテーブル、例えば表5によって取得されてよい。
Threshold=RhoMax[angleN]。
【0268】
ステップS204の前にangleNを決定できるので、ステップS204の前に現在のブロックに関して閾値を決定できることに留意されたい。
【0269】
閾値は、以下であってもよい。
threshLower=-RhoMax[angleN]
threshUpper=RhoMax[angleN]。
【表5】
【0270】
別の実現可能な実装において、閾値は、以下であってもよい。
threshLower=-K
threshUpper=K。Kは予め定められた正の数である。例えば、Kの値は、1としてよい。1つの例において、Kは、ビットストリーム内のインジケータに従って取得できる。
【0271】
別の実現可能な実装において、閾値は、現在のブロックの幅及び/又は高さに基づく。
【0272】
閾値は、2つ以上の上記条件によって決定されてもよいことに留意されたい。例えば、現在のブロックの幅及び/又は高さは、比、すなわち比=1<<abs(log2(width)-log2(height))を決定してよく、その後、この比は、角度によって決定される閾値をスケーリングするのに使用される。また、スケーリングされた閾値は、最終閾値として設定される。
【0273】
閾値と距離との比較が実行される。
【0274】
S204-1:距離の絶対値が閾値以下である場合、第3の動き情報がサンプルセットに関して保存されることを決定する。
S204-2:距離の絶対値が閾値よりも大きい場合、
距離が正(又は負)である場合、第1の動き情報がサンプルセットに関して保存されることを決定し、又は、
距離が負(又は、上記分岐に従って正)である場合、第2の動き情報がサンプルセットに関して保存されることを決定する。
【0275】
異なる実装によれば、ステップS204-1における条件は、距離の絶対値が閾値よりも小さいこととしてもよく、したがって、ステップS204-2における条件は、距離の絶対値が閾値以上であることあってよいことが理解され得る。
【0276】
別の実現可能な実装において、絶対値の計算は、より多くのサブセクションによって置換される。
【0277】
本実施形態において、距離がthreshLowerよりも小さい場合に、第1の動き情報がサンプルセットに関して保存され、距離がthreshUpperよりも大きい場合に、第2の動き情報がサンプルセットに関して保存され、そうでなければ、第3の動き情報がサンプルセットに関して保存される。
【0278】
また、第1の動き情報、第2の動き情報、及び第3の動き情報のうちの1つが、サンプルセットに対応する動き情報保存ユニットに保存されることが理解され得る。
【0279】
現在のブロックは、複数のサンプルセットに分割されてよく、実現可能な実装において、本実施形態における上記のステップは、全てのサンプルセットに対して使用されることに留意されたい。別の実現可能な実装において、本実施形態における上記のステップは、1つのサンプルセットのみに対して使用される。別の実現可能な実装において、本実施形態における上記のステップは、少なくとも2つのサンプルセットに対して使用される。上記のステップを伴って実装されないサンプルセットについて、実現可能な実装において、予め定められた条件に従って推定されるデフォルト動き情報又は動き情報が保存される。
【0280】
GEO区分のための動き情報の保存を決定するために、予め定められたGEO区分モジュール(関数)に基づいて距離値のみが計算されればよく、そのモジュールパラメータをCUレベルで決定できることに留意されたい。コンピューティングの複雑性が制限される。
【0281】
GEO予測モードのためのデコーディング処理の第4の実施形態において、
この処理は、MergeTriangleFlag[xCb][yCb]が1に等しい状態で又はgeo_flag[xCb][yCb]が1に等しい状態で、コーディングユニットをデコードする場合に呼び出される。
【0282】
この処理への入力は、以下のものである。
- 現在のピクチャの左上ルマサンプルに対する現在のコーディングブロックの左上サンプルを指定するルマ位置(xCb,yCb)、
- ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth、
- ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight、
- 1/16分数サンプル確度でのルマ動きベクトルmvA及びmvB、
- クロマ動きベクトルmvCA及びmvCB、
- 参照インデックスrefIdxA及びrefIdxB、
- 予測リストフラグpredListFlagA及びpredListFlagB。
【0283】
この処理の出力は、以下のものである。
- ルマ予測サンプルの(cbWidth)×(cbHeight)アレイpredSamplesL、
- 成分Cbのためのクロマ予測サンプルの(cbWidth/2)×(cbHeight/2)アレイpredSamplesCb、
- 成分Crのためのクロマ予測サンプルの(cbWidth/2)×(cbHeight/2)アレイpredSamplesCr。
【0284】
predSamplesLAL及びpredSamplesLBLを予測されるルマサンプル値(cbWidth)×(cbHeight)アレイとし、predSamplesLACb、predSamplesLBCb、predSamplesLACr、及びpredSamplesLBCrを、予測されるクロマサンプル値の(cbWidth/2)×(cbHeight/2)アレイとする。
【0285】
predSamplesL、predSamplesCb、及びpredSamplesCrは、以下の順序付けられたステップによって導出される。
3.NがA及びBのそれぞれである場合、以下が適用される。
- ルマサンプルの順序付けられた二次元アレイrefPicLNL及びクロマサンプルの2つの順序付けられた二次元アレイrefPicLNCb及びrefPicLNCrからなる参照ピクチャは、predListFlagNに等しく設定されたX、及びrefIdxNに等しく設定されたrefIdxXを入力として、導出される。
- アレイpredSamplesLNLは、ルマ位置(xCb,yCb)、cbWidthに等しく設定されたルマコーディングブロック幅sbWidth、cbHeightに等しく設定されたルマコーディングブロック高さsbHeight、(0,0)に等しく設定された動きベクトルオフセットmvOffset、mvNに等しく設定された動きベクトルmvLX及びrefPicLNLに等しく設定された参照アレイrefPicLXL、FALSEに等しく設定された変数bdofFlag、並びに0に等しく設定された変数cIdxを入力として、分数サンプル補間処理を呼び出すことによって導出される。
- アレイpredSamplesLNCbは、ルマ位置(xCb,yCb)、cbWidth/2に等しく設定されたコーディングブロック幅sbWidth、cbHeight/2に等しく設定されたコーディングブロック高さsbHeight、(0,0)に等しく設定された動きベクトルオフセットmvOffset、mvCNに等しく設定された動きベクトルmvLX、及びrefPicLNCbに等しく設定された参照アレイrefPicLXCb、FALSEに等しく設定された変数bdofFlag、並びに1に等しく設定された変数cIdxを入力として、分数サンプル補間処理を呼び出すことによって導出される。
- アレイpredSamplesLNCrは、ルマ位置(xCb,yCb)、cbWidth/2に等しく設定されたコーディングブロック幅sbWidth、cbHeight/2に等しく設定されたコーディングブロック高さsbHeight、(0,0)に等しく設定された動きベクトルオフセットmvOffset、mvCNに等しく設定された動きベクトルmvLX、及びrefPicLNCrに等しく設定された参照アレイrefPicLXCr、FALSEに等しく設定された変数bdofFlag、並びに2に等しく設定された変数cIdxを入力として、分数サンプル補間処理を呼び出すことによって導出される。
4.MergeTriangleFlag[xCb][yCb]が1に等しい場合、マージ三角形モード変数の区分方向triangleDirは、merge_triangle_split_dir[xCb][yCb]に等しく設定される。
a.現在のルマコーディングブロック内の予測サンプル、すなわち、xL=0..cbWidth-1であり、yL=0..cbHeight-1であるpredSamplesL[xL][yL]は、cbWidthに等しく設定されたコーディングブロック幅nCbW、cbHeightに等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLAL及びpredSamplesLBL、並びに変数triangleDir、並びに0に等しいcIdxを入力として、三角形マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
b.現在のクロマ成分Cbコーディングブロック内の予測サンプル、すなわち、xC=0..cbWidth/2-1であり、yC=0..cbHeight/2-1であるpredSamplesCb[xC][yC]は、cbWidth/2に等しく設定されたコーディングブロック幅nCbW、cbHeight/2に等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLACb及びpredSamplesLBCb、並びに変数triangleDir、並びに1に等しいcIdxを入力として、三角形マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
c.現在のクロマ成分Crコーディングブロック内の予測サンプル、すなわち、xC=0..cbWidth/2-1であり、yC=0..cbHeight/2-1であるpredSamplesCr[xC][yC]は、cbWidth/2に等しく設定されたコーディングブロック幅nCbW、cbHeight/2に等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLACr及びpredSamplesLBCr、並びに変数triangleDir、並びに2に等しいcIdxを入力として、三角形マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
d.マージ三角形モードのための動きベクトル保存処理は、ルマコーディングブロック位置(xCb,yCb)、ルマコーディングブロック幅cbWidth、ルマコーディングブロック高さcbHeight、区分方向triangleDir、ルマ動きベクトルmvA及びmvB、参照インデックスrefIdxA及びrefIdxB、並びに予測リストフラグpredListFlagA及びpredListFlagBを入力として、呼び出される。
5.geo_flag[xCb][yCb]が1に等しい場合、幾何学的区分化に関連する変数angleIdx及びdistanceIdxは、表1において指定されるようにgeo_partitioning_idx[xCb][yCb]の値に従って設定される。
a.幾何学的区分化マージモードのためのサンプル重み導出処理が呼び出される。この処理への入力は、それぞれ(cbWidth)×(cbHeight)、(cbWidth/2)×(cbHeight/2)、及び(cbWidth/4)×(cbHeight/4)のサイズの3つの順序付けられたアレイsampleWeightL、sampleWeightC、及びmotionWeight、並びに、変数angleIdx、distanceIdx、cbWidth、及びcbHeightである。
b.現在のルマコーディングブロック内の予測サンプル、すなわち、xL=0..cbWidth-1であり、yL=0..cbHeight-1であるpredSamplesL[xL][yL]は、cbWidthに等しく設定されたコーディングブロック幅nCbW、cbHeightに等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLAL、predSamplesLBL、predWeightL、及び0に等しいcIdxを入力として、幾何学的区分化マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
c.現在のクロマ成分Cbコーディングブロック内の予測サンプル、すなわち、xC=0..cbWidth/2-1であり、yC=0..cbHeight/2-1であるpredSamplesCb[xC][yC]は、cbWidth/2に等しく設定されたコーディングブロック幅nCbW、cbHeight/2に等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLACb、predSamplesLBCb、predWeightC、及び1に等しいcIdxを入力として、幾何学的区分化マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
d.現在のクロマ成分Crコーディングブロック内の予測サンプル、すなわち、xC=0..cbWidth/2-1であり、yC=0..cbHeight/2-1であるpredSamplesCr[xC][yC]は、cbWidth/2に等しく設定されたコーディングブロック幅nCbW、cbHeight/2に等しく設定されたコーディングブロック高さnCbH、サンプルアレイpredSamplesLACr、predSamplesLBCr、predWeightC、及び2に等しいcIdxを入力として、項8.5.8.3において指定されている幾何学的区分化マージモードのための重み付けられたサンプル予測処理を呼び出すことによって導出される。
e.幾何学的マージモードのための動きベクトル保存処理は、ルマコーディングブロック位置(xCb,yCb)、ルマコーディングブロック幅cbWidth、ルマコーディングブロック高さcbHeight、サンプルアレイmotionWeight、ルマ動きベクトルmvA及びmvB、参照インデックスrefIdxA及びrefIdxB、並びに、予測リストフラグpredListFlagA及びpredListFlagBを入力として、呼び出される。
【0286】
[三角形マージモードのための参照ピクチャマッピング処理]
この処理への入力は、以下のものである。
- 参照リストが0又は1に等しいことを表す変数X、
- 参照インデックスrefIdxN。
【0287】
この処理の出力は、以下のものである:
- 参照インデックスrefIdxTemp。
【0288】
変数refPicPocは、以下の通りに導出される。
refPicPoc=(X==0) ? RefPicList[0][refIdxN] : RefPicList[1][refIdxN] (8-878)
参照ピクチャリストrefPicListTempは、以下の通りに導出される。
refPicListTemp=(X==0) ? RefPicList[1] : RefPicList[0] (8-879)
変数refIdxTempは、以下の通りに導出される。
- 変数mapStopは、FALSEに等しく設定され、
- m=0..NumRefIdxActive[1]-1である変数refIdxmについて、mapStopがFALSEに等しくなるまで、以下が適用される。
refIdxTemp=(refPicListTemp[refIdxm]==refPicPoc) ? refIdxm : -1 (8-880)
mapStop=(refIdxTemp!=-1) ? TRUE : FALSE (8-881)
【0289】
[幾何学的区分化マージモードのためのサンプル重み導出処理]
この処理への入力は、以下のものである。
- 現在のコーディングブロックの幅及び高さを指定する2つの変数nCbW及びnCbH、
- 現在の幾何学的区分化モードの角度及び距離ルックアップ値を指定する2つの変数angleIdx及びdistanceIdx、
- (nCbW)×(nCbH)アレイsampleWeightL、
- (nCbW/2)×(nCbH/2)アレイsampleWeightC、
- (nCbW/4)×(nCbH/4)アレイmotionWeight。
【0290】
この処理の出力は、0...8の範囲を有するサンプル当たりの重み値の同じ3つのアレイsampleWeightL、sampleWeightC、及びmotionWeightである。
4.現在の幾何学的区分化モードのためのsampleWeightLに保存されるルマブレンディング重みは、以下の通りに導出される。
以下の変数の値が設定される。
- wIdxが、log2(nCbW)-3に設定され、
- hIdxがlog2(nCbH)-3に設定され、
- stepOffsetが64に設定され、
- 以下の変数が、(wIdx>=hIdx)の比較に従って設定され、
- whRratio=(wIdx>=hIdx)?wIdx-hIdx:hIdx-wIdx (8-882)
- wIsLargerH=(wIdx>=hIdx)?true:false (8-883)
- scaleStep=(wIdx>=hIdx)?(1<<hIdx):(1<<wIdx) (8-884)
- displacementXがangleIdxに設定され、
- displacementYが(displacementX+8)%32に設定され、
- angleNが以下に設定され、
angleN=angleIdx if angleIdx>=0&&angleIdx<=8,
angleN=16-angleIdx if angleIdx>8&&angleIdx<=16,
angleN=angleIdx-16 if angleIdx>16&&angleIdx<=24,
angleN=32-angleIdx otherwise、
- さらに、wIsLargerHに依拠して、angleNが以下の値に設定され、
angleN=(wIsLargerH)?8-angleN:angleN
- stepDisは、表2に指定されるようにwhRatio及びangleNの値に従って設定され、さらに、以下であり、
stepSize=stepDis+stepOffset
- rhoは、表3において指定されているDisとして示されているルックアップテーブルを用いて、以下の値に設定される。
- rho=distanceIdx*stepSize*scaleStep+nCbW*Dis[displacementX]+nCbH*Dis[displacementY]。 (8-885)
各サンプル位置x=0...nCbW-1及びy=0...nCbH-1について、sampleWeightL[x][y]の値は、以下のようにして導出される。
- 距離distFromLine[x][y]は、以下の通りに表3において指定されているDisとして示されるルックアップテーブルを用いて計算される。
- distFromLine[x][y]=((x<<1)+1)*Dis[displacementX]+((y<<1)+1))*Dis[displacementY]-rho (8-886)
- スケーリングされた距離distScaledは、以下の通りに導出される。
- distScaled=min((abs(distFromLine[x][y])+8)>>4,14)。(8-887)
sampleWeightL[x][y]の値は、以下のように、表4において指定されているgeoFilterとして示されているフィルタ重みルックアップテーブルに従って設定される。
sampleWeightL[x][y]=GeoFilter[distScaled] if distFromLine<=0
sampleWeightL[x][y]=8-GeoFilter[distScaled] if distFromLine>0
5.現在の幾何学的区分化モードのためのsampleWeightCに保存されるクロマ重みは、以下の通りに導出される。
各サンプル位置x=0...(nCbW/2)-1及びy=0...(nCbH/2)-1について、sampleWeightC[x][y]の値は、以下のようにして導出される。
sampleWeightC[x][y]=sampleWeightL[(x<<1)][(y<<1)]
6.現在の幾何学的区分化モードのためのアレイmotionWeightに保存される動きの重みは、以下の通りに導出される。
- 以下の変数は、表5に従って設定される。
threshLower=-RhoMax[angleN]
threshUpper=RhoMax[angleN]
各サンプル位置x=0...(nCbW/4)-1及びy=0...(nCbH/4)-1について、motionWeight[x][y]の値は、以下のようにして導出される。
Cnt=distFromLine[x*4+1][y*4+1]
motionWeight[x][y]の値は、以下にセットされる。
motionWeight[x][y]=0 if Cnt<=threshLower
motionWeight[x][y]=1 if Cnt>=threshUpper
motionWeight[x][y]=2 otherwise
【0291】
[幾何学的区分化マージモードのための重み付けられたサンプル予測処理]
この処理への入力は、以下のものである。
- 現在のコーディングブロックの幅及び高さを指定する2つの変数nCbW及びnCbH、
- 2つの(nCbW)×(nCbH)アレイpredSamplesLA及びpredSamplesLB、
- (nCbW)×(nCbH)アレイsampleWeight、
- 色成分インデックスを指定する変数cIdx。
【0292】
この処理の出力は、予測サンプル値の(nCbW)×(nCbH)アレイpbSamplesである。
【0293】
変数bitDepthは、以下の通りに導出される。
- cIdxが0に等しい場合、bitDepthは、BitDepthYに等しく設定される。
- そうでなければ、bitDepthは、BitDepthCに等しく設定される。
【0294】
変数shift1及びoffset1は、以下の通りに導出される。
- 変数shift1は、Max(5,17-bitDepth)に等しく設定される。
- 変数offset1は、1<<(shift1-1)に等しく設定される。
【0295】
予測サンプル値は、以下の通りに導出される。
pbSamples[x][y]=
Clip3(0,(1<<bitDepth)-1,
(predSamplesLA[x][y]*sampleWeight[x][y]
+predSamplesLB[x][y]*(8-sampleWeight[x][y])+offset1)>>shift1)
【0296】
[幾何学的区分化マージモードのための動きベクトル保存]
この処理は、geo_flag[xCb][yCb]が1に等しい状態でコーディングユニットをデコードする場合に呼び出される。
【0297】
この処理への入力は、以下のものである。
- 現在のピクチャの左上ルマサンプルに対する現在のコーディングブロックの左上サンプルを指定するルマ位置(xCb,yCb)、
- ルマサンプルにおける現在のコーディングブロックの幅を指定する変数cbWidth、
- ルマサンプルにおける現在のコーディングブロックの高さを指定する変数cbHeight、
- 動きアサインメントインデックスを含む、(cbWidth/4)×(cbHeight/4)のサイズのアレイmotionWeight、
- 1/16サンプル確度でのルマ動きベクトルmvA及びmvB、
- 参照インデックスrefIdxA及びrefIdxB、
- 予測リストフラグpredListFlagA及びpredListFlagB
【0298】
水平及び垂直方向における現在のコーディングブロック内の4×4ブロックの数を指定する変数numSbX及びnumSbYは、numSbX=cbWidth>>2及びnumSbY=cbHeight>>2に等しく設定される。
【0299】
変数minSbは、min(numSbX,numSbY)に等しく設定される。
【0300】
変数refIdxTempAは、predListFlagAに等しく設定されたX、及びrefIdxAに等しく設定されたrefIdxNを入力として、項8.5.7.4において指定されている三角形マージモードのための参照ピクチャマッピング処理を呼び出すことによって導出される。
【0301】
変数refIdxTempBは、predListFlagBに等しく設定されたX、及びrefIdxBに等しく設定されたrefIdxNを入力として、項8.5.7.4において指定されている三角形マージモードのための参照ピクチャマッピング処理を呼び出すことによって導出される。
【0302】
xSbIdx=0..numSbX-1であり、ySbIdx=0..numSbY-1である、サブブロックインデックス(xSbIdx,ySbIdx)における各4×4サブブロックについて、以下が適用される。
- motionWeight[xSbIdx][ySbIdx]が0に等しい場合、以下が適用される。
predFlagL0=(predListFlagA==0) ? 1 : 0 (8-888)
predFlagL1=(predListFlagA==0) ? 0:1 (8-889)
refIdxL0=(predListFlagA==0) ? refIdxA : -1 (8-890)
refIdxL1=(predListFlagA==0) ? -1 : refIdxA (8-891)
mvL0[0]=(predListFlagA==0) ? mvA[0] : 0 (8-892)
mvL0[1]=(predListFlagA==0) ? mvA[1] : 0 (8-893)
mvL1[0]=(predListFlagA==0) ? 0 : mvA[0] (8-894)
mvL1[1]=(predListFlagA==0) ? 0 : mvA[1] (8-895)
- そうでなければ、motionWeight[xSbIdx][ySbIdx]が1に等しい場合、以下が適用される。
predFlagL0=(predListFlagB==0) ? 1 : 0 (8-896)
predFlagL1=(predListFlagB==0) ? 0 : 1 (8-897)
refIdxL0=(predListFlagB==0) ? refIdxB : -1 (8-898)
refIdxL1=(predListFlagB==0) ? -1 : refIdxB (8-899)
mvL0[0]=(predListFlagB==0) ? mvB[0] : 0 (8-900)
mvL0[1]=(predListFlagB==0) ? mvB[1] : 0 (8-901)
mvL1[0]=(predListFlagB==0) ? 0 : mvB[0] (8-902)
mvL1[1]=(predListFlagB==0) ? 0 : mvB[1] (8-903)
- そうでなければ(motionWeight[xSbIdx][ySbIdx]が2に等しい)、以下が適用される。
- predListFlagA+predListFlagBが1に等しい場合、
predFlagL0=1 (8-904)
predFlagL1=1 (8-905)
refIdxL0=(predListFlagA==0)?refIdxA : refIdxB (8-906)
refIdxL1=(predListFlagA==0)?refIdxB : refIdxA (8-907)
mvL0[0]=(predListFlagA==0)?mvA[0] : mvB[0] (8-908)
mvL0[1]=(predListFlagA==0)?mvA[1] : mvB[1] (8-909)
mvL1[0]=(predListFlagA==0)?mvB[0] : mvA[0] (8-910)
mvL1[1]=(predListFlagA==0)?mvB[1] : mvA[1] (8-911)
- predListFlagA+predListFlagBが0に等しい場合、以下が適用される。
predFlagL0=1 (8-912)
predFlagL1=(refIdxTempA==-1&&refIdxTempB==-1) ? 0 : 1 (8-913)
refIdxL0=(refIdxTempB!=-1)?refIdxA : (8-914)
((refIdxTempA!=-1)?refIdxB : refIdxA)
refIdxL1=(refIdxTempB!=-1)?refIdxTempB : (8-915)
((refIdxTempA!=-1)?refIdxTempA : -1)
mvL0[0]=(refIdxTempB!=-1)?mvA[0] : (8-916)
((refIdxTempA!=-1)?mvB[0] : mvA[0])
mvL0[1]=(refIdxTempB!=-1)?mvA[1] : (8-917)
((refIdxTempA!=-1)?mvB[1] : mvA[1])
mvL1[0]=(refIdxTempB!=-1)?mvB[0]: (8-918)
((refIdxTempA!=-1)?mvA[0] : 0)
mvL1[1]=(refIdxTempB!=-1)?mvB[1]: (8-919)
((refIdxTempA!=-1)?mvA[1] : 0)
- predListFlagA+predListFlagBが2に等しい場合、以下が適用される。
predFlagL0=(refIdxTempA==-1&&refIdxTempB==-1)?0 : 1 (8-920)
predFlagL1=1 (8-921)
refIdxL0=(refIdxTempB!=-1)?refIdxTempB : (8-922)
((refIdxTempA!=-1)?refIdxTempA : -1)
refIdxL1=(refIdxTempB!=-1)?refIdxA : (8-923)
((refIdxTempA!=-1)?refIdxB : refIdxA)
mvL0[0]=(refIdxTempB!=-1)?mvB[0] : (8-924)
((refIdxTempA!=-1)?mvA[0] : 0)
mvL0[1]=(refIdxTempB!=-1)?mvB[1] : (8-925)
((refIdxTempA!=-1)?mvA[1] : 0)
mvL1[0]=(refIdxTempB!=-1)?mvA[0] : (8-926)
((refIdxTempA!=-1)?mvB[0] : mvA[0])
mvL1[1]=(refIdxTempB!=-1)?mvA[1] : (8-927)
((refIdxTempA!=-1)?mvB[1] : mvA[1])
- x=0..3であり、y=0..3である場合、以下のアサインメントが行われる。
MvL0[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=mvL0 (8-928)
MvL1[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=mvL1 (8-929)
RefIdxL0[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=refIdxL0 (8-930)
RedIdxL1[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=refIdxL1 (8-931)
PredFlagL0[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=predFlagL0 (8-932)
PredFlagL1[(xSbIdx<<2)+x][(ySbIdx<<2)+y]=predFlagL1 (8-933)
【0303】
代替的な実装において、「幾何学的区分化マージモードのためのサンプル重み導出処理」のステップ6を以下のように実装できる。
6.現在の幾何学的区分化モードのためのアレイmotionWeightに保存される動きの重みは、以下の通りに導出される。
- 以下の変数が表5に従って設定される。
threshLower=-RhoMax[angleN]
threshUpper=RhoMax[angleN]
【0304】
各サンプル位置x=0...(nCbW/4)-1及びy=0...(nCbH/4)-1に関して、motionWeight[x][y]の値は、以下のようにして導出される。
Cnt=((x<<4)+3)*Dis[displacementX]+((y<<4)+3))*Dis[displacementY]-rho<<1
motionWeight[x][y]の値は、以下に設定される。
motionWeight[x][y]=0 if Cnt<=threshLower
motionWeight[x][y]=1 if Cnt>=threshUpper
motionWeight[x][y]=2 otherwise
【0305】
「幾何学的区分化マージモードのためのサンプル重み導出処理」のステップ6の上記の例示的な実装において、式「Cnt=((x<<4)+3)*Dis[displacementX]+((y<<4)+3))*Dis[displacementY]-rho<<1」は、サンプルのセットの重心と線との間の距離の計算に対応する。この例におけるサンプルのセットは、以下の座標を有する16のサンプルを含む。
(x*4,y*4),(x*4+1,y*4),(x*4+2,y*4),(x*4+3,y*4),(x*4,y*4+1),(x*4+1,y*4+1),(x*4+2,y*4+1),(x*4+3,y*4+1),(x*4,y*4+2),(x*4+1,y*4+2),(x*4+2,y*4+2),(x*4+3,y*4+2),(x*4,y*4+3),(x*4+1,y*4+3),(x*4+2,y*4+3),(x*4+3,y*4+3)。
【0306】
重心の座標は、(x*4+1.5,y*4+1.5)である。整数演算が望ましい実装機能であるので、上記式において、式の付加的な項の全ては、座標オフセット1.5を整数にするために2で乗算される(したがって、この例では3である)。
【0307】
第5の実施形態において、
図21に示されているような、動き情報を保存する装置は以下のものである。
【0308】
動き情報保存装置(3000)であって、現在のブロックが第1のサブブロック及び第2のサブブロックからなり、上記第1のサブブロック及び上記第2のサブブロックは、共通の境界によって分離され、上記第1のサブブロックは、第1の動き情報に対応し、上記第2のサブブロックは、第2の動き情報に対応し、上記装置(3000)は、上記現在のブロック内のサンプルセットと上記共通の境界との間の距離を決定するように構成されている計算モジュール(3001)と、第3の動き情報が上記サンプルセットに関して保存されるか否かを決定するために、上記距離を閾値と比較するように構成されている比較モジュール(3002)であって、上記第3の動き情報は、上記第1の動き情報及び上記第2の動き情報によって導出される、比較モジュールと、を備える、動き情報保存装置。
【0309】
実現可能な実装において、上記比較モジュール(3002)は、上記距離の絶対値が上記閾値以下である場合、上記第3の動き情報が上記サンプルセットに関して保存されることを決定するように構成されている。
【0310】
実現可能な実装において、上記距離の上記絶対値が上記閾値よりも大きい場合、上記比較モジュール(3002)は、上記距離が正である場合、上記第1の動き情報が上記サンプルセットに関して保存されることを決定する、又は、上記距離が負である場合、上記第2の動き情報が上記サンプルセットに関して保存されることを決定するようにさらに構成されている。
【0311】
実現可能な実装において、閾値は予め定められている。
【0312】
実現可能な実装において、上記閾値は、上記共通の境界と水平方向又は垂直方向との間の幾何学的関係に基づく。
【0313】
実現可能な実装において、上記閾値は、上記共通の境界の直交方向と、上記水平方向又は上記垂直方向との間の角度に基づく。
【0314】
実現可能な実装において、上記閾値は、上記現在のブロックの幅及び/又は高さに基づく。
【0315】
実現可能な実装において、上記共通の境界は、角度パラメータ及び距離パラメータによって決定され、上記計算モジュール(3001)は、上記角度パラメータ及び上記距離パラメータを決定するようにさらに構成されている。
【0316】
実現可能な実装において、デコーダでは、上記計算モジュール(3001)は、ビットストリームから上記角度パラメータ及び上記距離パラメータをパースする、又は、上記ビットストリームからインジケータをパースし、上記インジケータに基づいて上記角度パラメータ及び上記距離パラメータを取得するようにさらに構成されている。
【0317】
実現可能な実装において、上記計算モジュール(3001)は、上記角度パラメータに基づいて第1の計算パラメータを決定し、上記角度パラメータに基づいてtemp角度パラメータを計算し、上記temp角度パラメータに基づいて第2の計算パラメータを決定し、上記角度パラメータ及び上記距離パラメータに基づいて第3の計算パラメータを計算するようにさらに構成されている。
【0318】
実現可能な実装において、上記第1の計算パラメータは、上記角度パラメータに従って、予め設定されたルックアップテーブルをチェックすることによって決定され、上記第2の計算パラメータは、上記temp角度パラメータに従って、上記ルックアップテーブルをチェックすることによって決定され、上記第1の計算パラメータ及び上記第2の計算パラメータは、それぞれ、同じ角度のコサイン値及びサイン値である。
【0319】
実現可能な実装において、上記距離は、以下によって計算され、
distFromLine=(x+K)*P1+(y+K)*P2-P3
P1、P2、及びP3は、それぞれ、上記第1の計算パラメータ、上記第2の計算パラメータ、及び上記第3の計算パラメータであり、distFromLineは、上記距離を表し、Kは、非負の整数であり、xは、上記サンプルセットにおけるターゲット位置の水平座標を表し、yは、矩形座標系における上記ターゲット位置の垂直座標を表し、上記現在のブロックの左上サンプルの位置は、座標原点として設定され、右方向は、正の水平方向として設定され、下方向は、正の垂直方向として設定される。
【0320】
実現可能な実装において、Kは1に等しい。
【0321】
実現可能な実装において、上記ターゲット位置は、上記サンプルセットにおいて予め定められている。
【0322】
実現可能な実装において、上記予め定められた位置は、上記サンプルセットの左上位置である、又は、上記サンプルセットの中心位置である。
【0323】
実現可能な実装において、上記距離のサンプル精度は、整数サンプルよりも高く、
対応して、上記距離は、以下によって計算され、
distFromLine=((x<<N)+K)*P1+((y<<N)+K)*P2-P3
2Nは、上記距離の上記サンプル精度の逆数を表す。
【0324】
実現可能な実装において、Nは1に等しい。
【0325】
実現可能な実装において、上記サンプルセットは、上記現在のブロックのルマサンプルセットである。
【0326】
実現可能な実装において、上記装置(3000)は、上記現在のブロックを複数のサンプルセットに分割し、上記複数のサンプルセットのそれぞれが上記サンプルセットと同じサイズを有する、又は、上記現在のブロックを上記サンプルセットとして設定するように構成されている分割モジュール(3003)をさらに備える。
【0327】
実現可能な実装において、サンプルセットは4×4サンプルアレイである。
【0328】
実現可能な実装において、上記複数のサンプルセットのそれぞれは、各動き情報保存ユニットに対応し、上記動き情報保存ユニットは、上記第1の動き情報、上記第2の動き情報、及び上記第3の動き情報のうちの1つを保存するために使用される。
【0329】
実現可能な実装において、上記第1のサブブロック及び上記第2のサブブロックは、三角形区分、非対称矩形区分、又は台形区分である。
【0330】
実現可能な実装において、上記第1の動き情報は、第1の参照ピクチャリストに基づく動き情報を含み、上記第2の動き情報は、第2の参照ピクチャリストに基づく動き情報を含み、上記第3の動き情報は、上記第1の動き情報及び上記第2の動き情報を含む。
【0331】
第6の実施形態において、ビデオストリームをデコードする装置は、プロセッサとメモリとを備え、上記メモリは、プロセッサに第3の実施形態のいずれかの実装による方法を実行させる命令を記憶している。
【0332】
第7の実施形態において、ビデオストリームをエンコードする装置は、プロセッサとメモリとを備え、上記メモリは、上記プロセッサに第3の実施形態のいずれかの実装による方法を実行させる命令を記憶している。
【0333】
第8の実施形態において、実行されると、1又は複数のプロセッサがビデオデータをコードするように構成されているようにする命令を記憶したコンピュータ可読記憶媒体であって、上記命令は、上記1又は複数のプロセッサに第3の実施形態のいずれかの実装による方法を実行させる、コンピュータ可読記憶媒体。
【0334】
第9の実施形態において、コンピュータ上で実行されると、第3の実施形態のいずれかの実装による方法を実行するプログラムコードを備える、コンピュータプログラム。
【0335】
以下は、上述の実施形態に示されるようなエンコーディング方法及びデコーディング方法の適用及びそれらを用いたシステムの説明である。
【0336】
図22は、コンテンツ配信サービスを実現するためのコンテンツ供給システム3100を示すブロック図である。このコンテンツ供給システム3100は、撮影デバイス3102と、端末デバイス3106とを含み、任意で、ディスプレイ3126を含む。撮影デバイス3102は、通信リンク3104を介して端末デバイス3106と通信する。通信リンクは、上述した通信チャネル13を含んでよい。通信リンク3104は、限定されるものではないが、WIFI、イーサネット(登録商標)、ケーブル、無線(3G/4G/5G)、USB、又はこれらの任意の種類の組み合わせ等を含む。
【0337】
撮影デバイス3102は、データを生成し、上記の実施形態に示されるようなエンコーディング方法によってデータをエンコードしてよい。代替的に、撮影デバイス3102は、データをストリーミングサーバ(図には示されていない)に配信してよく、サーバは、データをエンコードして、エンコードされたデータを端末デバイス3106に伝送する。撮影デバイス3102は、限定されるものではないが、カメラ、スマートフォンもしくはパッド、コンピュータもしくはラップトップ、ビデオ会議システム、PDA、車載デバイス、又はこれらのいずれかの組み合わせ等を含む。例えば、上述したように、撮影デバイス3102はソースデバイス12を含んでよい。データがビデオを含む場合、撮影デバイス3102に含まれるビデオエンコーダ20は、ビデオエンコーディング処理を実際に実行してよい。データがオーディオ(すなわち、音声)を含む場合、撮影デバイス3102に含まれるオーディオエンコーダは、オーディオエンコーディング処理を実際に実行してよい。いくつかの実用的なシナリオについて、撮影デバイス3102は、これらを一緒に多重化することにより、エンコードされたビデオ及びオーディオデータを配信する。他の実用的なシナリオについて、例えば、ビデオ会議システムにおいて、エンコードされたオーディオデータ及びエンコードされたビデオデータは多重化されない。撮影デバイス3102は、エンコードされたオーディオデータ及びエンコードされたビデオデータを別個に端末デバイス3106に配信する。
【0338】
コンテンツ供給システム3100において、端末デバイス310は、エンコードされたデータを受信及び再現する。端末デバイス3106は、データ受信及び復元機能を有するデバイス、例えば、上述したエンコードされたデータをデコードすることが可能なスマートフォンもしくはパッド3108、コンピュータもしくはラップトップ3110、ネットワークビデオレコーダ(NVR)/デジタルビデオレコーダ(DVR)3112、TV3114、セットトップボックス(STB)3116、ビデオ会議システム3118、ビデオ監視システム3120、パーソナルデジタルアシスタント(PDA)3122、車載デバイス3124、又はこれらのいずれかの組み合わせ等とすることができる。例えば、上述したように、端末デバイス3106はデスティネーションデバイス14を含んでよい。エンコードされたデータがビデオを含む場合、端末デバイスに含まれるビデオデコーダ30は、ビデオデコーディングを実行することを優先させる。エンコードされたデータがオーディオを含む場合、端末デバイスに含まれるオーディオデコーダは、オーディオデコーディング処理を実行することを優先させる。
【0339】
ディスプレイを有する端末デバイス、例えば、スマートフォンもしくはパッド3108、コンピュータもしくはラップトップ3110、ネットワークビデオレコーダ(NVR)/デジタルビデオレコーダ(DVR)3112、TV3114、パーソナルデジタルアシスタント(PDA)3122、又は車載デバイス3124について、端末デバイスは、デコードされたデータをそのディスプレイに送ることができる。ディスプレイを搭載していない端末デバイス、例えば、STB3116、ビデオ会議システム3118、又はビデオ監視システム3120について、外部ディスプレイ3126は、デコードされたデータを受信及び示すために、内部でコンタクトされる。
【0340】
このシステムにおける各デバイスがエンコーディング又はデコーディングを実行するとき、上述の実施形態に示されるようなピクチャエンコーディングデバイス又はピクチャデコーディングデバイスを使用することができる。
【0341】
図23は、端末デバイス3106の一例の構造を示す図である。端末デバイス3106が撮影デバイス3102からストリームを受信した後に、プロトコル処理ユニット3202は、ストリームの伝送プロトコルを解析する。プロトコルは、限定されるものではないが、リアルタイムストリーミングプロトコル(RTSP)、ハイパーテキストトランスファープロトコル(HTTP)、HTTPライブストリーミングプロトコル(HLS)、MPEG-DASH、リアルタイムトランスポートプロトコル(RTP)、リアルタイムメッセージングプロトコル(RTMP)、又は、これらの任意の種類の組み合わせ等を含む。
【0342】
プロトコル処理ユニット3202がストリームを処理した後に、ストリームファイルが生成される。このファイルは、逆多重化ユニット3204に出力される。逆多重化ユニット3204は、多重化されたデータをエンコードされたオーディオデータ及びエンコードされたビデオデータに分離できる。上述したように、いくつかの実用的なシナリオについて、例えば、ビデオ会議システムでは、エンコードされたオーディオデータ及びエンコードされたビデオデータは多重化されていない。この状況において、エンコードされたデータは、逆多重化ユニット3204を介することなくビデオデコーダ3206及びオーディオデコーダ3208に送信される。
【0343】
逆多重化処理を介して、ビデオエレメンタリストリーム(ES)、オーディオES及び任意で字幕が生成される。上述の実施形態において説明したように、ビデオデコーダ30を含むビデオデコーダ3206は、上述の実施形態に示されるようなデコーディング方法によってビデオESをデコードしてビデオフレームを生成し、このデータを同期ユニット3212に送る。オーディオデコーダ3208は、オーディオESをデコードしてオーディオフレームを生成し、このデータを同期ユニット3212に送る。代替的に、ビデオフレームは、それを同期ユニット3212に送る前に、(
図23には示されていない)バッファに保存されてよい。同様に、オーディオフレームは、それを同期ユニット3212に送る前に、(
図23には示されていない)バッファに保存されてよい。
【0344】
同期ユニット3212は、ビデオフレーム及びオーディオフレームを同期させて、ビデオ/オーディオをビデオ/オーディオディスプレイ3214に供給する。例えば、同期ユニット3212は、ビデオ及びオーディオ情報の提示を同期させる。情報は、コードされたオーディオ及びビジュアルデータの提示に関するタイムスタンプと、データストリームそのものの配信に関するタイムスタンプとを用いて構文でコードしてよい。
【0345】
ストリームに字幕が含まれている場合、字幕デコーダ3210は、字幕をデコードし、それをビデオフレーム及びオーディオフレームと同期させ、ビデオ/オーディオ/字幕をビデオ/オーディオ/字幕ディスプレイ3216に供給する。
【0346】
本願は、上述したシステムに限定されるものではなく、上述の実施形態におけるピクチャエンコーディングデバイス又はピクチャデコーディングデバイスのいずれかは、他のシステム、例えばカーシステムに組み込むことができる。
【0347】
[数学演算子]
本願において使用される数学演算子は、Cプログラミング言語において使用されるものと同様である。しかしながら、整数除算及び算術シフト演算の結果はより厳密に定義され、べき乗及び実数値除算等の追加の演算が定義される。番号付け及びカウントの慣例は一般に0から始まり、例えば「第1」は0番目と同等であり、「第2」は1番目と同等であり、以降も同様である。
【0348】
[算術演算子]
以下の算術演算子が、以下の通りに定義される。
【表6】
【0349】
[論理演算子]
以下の論理演算子が以下の通りに定義される。
x&&y x及びyのブール論理「and」
x||y x及びyのブール論理「or」
! ブール論理「not」
x?y:z xが真であるか又は0に等しくない場合、yの値として評価し、そうでなければ、zの値として評価する。
【0350】
[関係演算子]
以下の関係演算子が以下の通りに定義される。
> よりも大きい
>= 以上
< よりも小さい
<= 以下
== に等しい
!= に等しくない
関係演算子が、値「na」(非該当)をアサインされているシンタックス要素又は変数に適用される場合、値「na」は、そのシンタックス要素又は変数の区別的な値として扱われる。値「na」は、任意の他の値に等しくないとみなされる。
【0351】
[ビット単位演算子]
以下のビット単位演算子が以下の通りに定義される。
& ビット単位の「and」。整数引数に作用する場合、整数値の2の補数表現に作用する。別の引数より少ないビットを含むバイナリ引数に作用する場合、そのより短い引数は、0に等しいより上位のビットを追加することによって拡張される。
| ビット単位の「or」。整数引数に作用する場合、整数値の2の補数表現に作用する。別の引数より少ないビットを含むバイナリ引数に作用する場合、そのより短い引数は、0に等しいより上位のビットを追加することによって拡張される。
^ ビット単位の「排他的or」。整数引数に作用する場合、整数値の2の補数表現に作用する。別の引数より少ないビットを含むバイナリ引数に作用する場合、そのより短い引数は、0に等しいより上位のビットを追加することによって拡張される。
x>>y yの二進数だけの、xの2の補数整数表現の算術右シフト。この関数は、yの非負の整数値に関してのみ定義される。右シフトの結果として最上位ビット(MSB)にシフトされたビットは、シフト演算前のxのMSBに等しい値を有する。
x<<y yの二進数だけの、xの2の補数整数表現の算術左シフト。この関数は、yの非負の整数値に関してのみ定義される。左シフトの結果として最下位ビット(LSB)にシフトされたビットは、0に等しい値を有する。
【0352】
[代入演算子]
以下の算術演算子は以下のように定義される。
= 代入演算子
++ インクリメント、すなわち、x++は、x=x+1と同等であり、アレイインデックスにおいて使用されるとき、インクリメント演算の前の変数の値として評価する。
--デクリメント、すなわち、x--は、x=x-1と同等であり、アレイインデックスにおいて使用されるとき、デクリメント演算の前の変数の値として評価する。
+= 指定された量だけのインクリメント、すなわち、x+=3は、x=x+3と同等であり、
x+=(-3)は、x=x+(-3)と同等である。
-= 指定された量だけのデクリメント、すなわち、x-=3は、x=x-3と同等であり、
x-=(-3)は、x=x-(-3)と同等である。
【0353】
[範囲表記]
値の範囲を指定するために以下の表記が使用される。
x=y..z xはyから始まりzまで(両端含む)の整数値を取り、x、y、及びzは整数であり、zはyよりも大きい。
【0354】
[数学関数]
以下の数学関数が定義される。
【数1】
Asin(x) -1.0から1.0の範囲(両端含む)にある引数xに作用する逆三角サイン関数であり、出力値は、-π÷2からπ÷2の範囲(両端含む)にある(単位はラジアン)。
Atan(x) 引数xに作用する逆三角タンジェント関数であり、
出力値は、-π÷2からπ÷2の範囲(両端含む)にある(単位はラジアン)
【数2】
Ceil(x) x以上の最小の整数。
Clip1
Y(x)=Clip3(0,(1<<BitDepth
Y)-1,x)
Clip1
C(x)=Clip3(0,(1<<BitDepth
C)-1,x)
【数3】
Cos(x) ラジアンの単位である引数xに作用する三角コサイン関数。
Floor(x) x以下の最大の整数。
【数4】
Ln(x) xの自然対数(底をeとする対数、eは自然対数底定数2.718 281 828...)。
Log2(x) 底を2とするxの対数。
Log10(x) 底を10とするxの対数。
【数5】
【数6】
Round(x)=Sign(x)*Floor(Abs(x)+0.5)
【数7】
Sin(x) ラジアンの単位である引数xに作用する三角サイン関数
【数8】
Swap(x,y)=(y,x)
Tan(x) ラジアンの単位である引数xに作用する三角タンジェント関数
【0355】
[演算の優先度の順位]
数式における優先度の順位が、括弧の使用によって明示的に示されていないとき、以下のルールが適用される。
【0356】
- より高い優先度の演算は、より低い優先度の任意の演算の前に評価される。
【0357】
- 同じ優先度の演算は、左から右に順に評価される。
【0358】
下の表は、演算の優先度を最高から最低まで指定し、表においてより高い位置は、より高い優先度を示す。
【0359】
Cプログラミング言語においても使用される演算子の場合、本明細書において使用される優先度の順序は、Cプログラミング言語において使用されるものと同じである。
表:最高(表の一番上)から最低(表の一番下)までの演算優先度
【表7】
【0360】
[論理演算のテキストの説明]
テキストにおいて、論理演算のステートメントは、以下の形式で数学的に記述される。
if(condition 0)
statement 0
else if(condition 1)
statement 1
...
else/*残りの条件についての参考注記*/
statement n
は、以下のようにして記述され得る。
...as follows/...the following applies:
- If condition 0,statement 0
- Otherwise, if condition 1,statement 1
- ...
- Otherwise(残りの条件についての参考注記),statement n
【0361】
テキストにおける「If...Otherwise,if...Otherwise,...」ステートメントのそれぞれは、直後に「If...」が続く「...as follows」又は「...the following applies」を用いて導入される。「If...Otherwise,if...Otherwise,...」の最後の条件は常に、「Otherwise,...」である。インターリーブされた「If...Otherwise,if...Otherwise,...」ステートメントは、「...as follows」又は「...the following applies」を末尾の「Otherwise,...」とマッチさせることによって識別できる。
【0362】
テキストにおいて、論理演算のステートメントは、以下の形式で数学的に記述される。
if(condition 0a && condition 0b)
statement 0
else if(condition 1a || condition 1b)
statement 1
...
else
statement n
は、以下のようにして記載され得る。
...as follows/...the following applies:
- 以下の条件の全てが真である場合、statement 0:
- condition 0a
- condition 0b
- そうでなければ、以下の条件のうちの1又は複数が真である場合、statement 1:
- condition 1a
- condition 1b
- ...
- そうでなければ、statement n
【0363】
テキストにおいて、論理演算のステートメントは、以下の形式で数学的に記述される。
if(condition 0)
statement 0
if(condition 1)
statement 1
は、以下のようにして記載され得る。
When condition 0, statement 0
When condition 1, statement 1。
【0364】
例えばエンコーダ20及びデコーダ30の実施形態、並びに、例えばエンコーダ20及びデコーダ30を参照して本明細書に記載された機能は、ハードウェア、ソフトウェア、ファームウェア、又はそれらの任意の組み合わせで実装されてよい。ソフトウェアにおいて実装される場合、機能は、コンピュータ可読媒体上に保存されるか、又は、通信媒体を介して1又は複数の命令もしくはコードとして送信され、ハードウェアベースの処理ユニットによって実行されてよい。コンピュータ可読媒体は、データ記憶媒体等の有形媒体に対応するコンピュータ可読記憶媒体、又は、例えば通信プロトコルに従った、コンピュータプログラムの1つの場所から別の場所への移動を容易にする任意の媒体を含む通信媒体を含んでよい。このように、コンピュータ可読媒体は、一般に、(1)非一時的な有形コンピュータ可読記憶媒体、又は、(2)信号もしくは搬送波等の通信媒体に対応してよい。データ記憶媒体は、本開示に記載された技術の実装のための命令、コード、及び/又はデータ構造を取得するために、1もしくは複数のコンピュータ又は1もしくは複数のプロセッサによってアクセスできる任意の利用可能な媒体であってよい。コンピュータプログラム製品は、コンピュータ可読媒体を含んでよい。
【0365】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、又は、命令もしくはデータ構造の形態の所望のプログラムコードを保存するのに使用でき、且つコンピュータによってアクセスできる、任意の他の媒体を含むことができる。また、任意の接続が、適宜コンピュータ可読媒体と称される。例えば、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者線(DSL)、又は、赤外線、無線、及びマイクロ波等の無線技術を用いて、ウェブサイト、サーバ、又は他のリモートソースから命令が送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、又は、赤外線、無線、及びマイクロ波等の無線技術が媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体及びデータ記憶媒体は、接続、搬送波、信号、又は他の一時的媒体を含まず、その代わりに、非一時的な有形の記憶媒体を指すことが理解されるべきである。本明細書で使用されるディスク(Disk and disc)は、コンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、フロッピディスク、及びブルーレイディスクを含み、ここで、通例、ディスク(disk)はデータを磁気的に再現するものであり、ディスク(disc)はデータをレーザによって光学的に再現するものである。上記の組み合わせもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【0366】
命令は、1又は複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)、又は他の等価な一体型もしくはディスクリート論理回路等の1又は複数のプロセッサによって実行されてよい。したがって、本明細書で使用される「プロセッサ」という用語は、前述の構造のいずれか、又は、本明細書に記載の技術の実装に好適な任意の他の構造を指してよい。加えて、いくつかの態様では、本明細書に記載の機能は、エンコーディング及びデコーディングのために構成されている専用ハードウェア及び/又はソフトウェアモジュール内に提供されるか、又は、組み合わされたコーデックに組み込まれてよい。また、本技術は、1もしくは複数の回路又は論理要素において完全に実装することができる。
【0367】
本開示の技術は、無線ハンドセット、集積回路(IC)又はICのセット(例えば、チップセット)を含む、多種多様なデバイス又は装置において実装してよい。様々なコンポーネント、モジュール、又はユニットが、開示された技術を実行するように構成されているデバイスの機能的態様を強調するように本開示において記載されているが、異なるハードウェアユニットによる実現は必ずしも要求されない。むしろ、上述したように、好適なソフトウェア及び/又はファームウェアと連動して、様々なユニットがコーデックハードウェアユニットにして組み合わされるか、又は、上述したように、1もしくは複数のプロセッサを含む相互運用ハードウェアユニットの集合によって提供されてよい。
(項目1)
動き情報保存方法であって、現在のブロックが第1のサブブロック及び第2のサブブロックからなり、上記第1のサブブロック及び上記第2のサブブロックは、共通の境界によって分離され、上記第1のサブブロックは、第1の動き情報に対応し、上記第2のサブブロックは、第2の動き情報に対応し、上記方法は、
上記現在のブロック内のサンプルセットと上記共通の境界との間の距離を決定する段階と、
第3の動き情報が上記サンプルセットに関して保存されるか否かを決定するために、上記距離を閾値と比較する段階であって、上記第3の動き情報は、上記第1の動き情報及び上記第2の動き情報によって導出される、比較する段階と、
を備える、動き情報保存方法。
(項目2)
上記第3の動き情報が上記サンプルセットに関して保存されるか否かを決定するために、上記距離を閾値と比較する段階は、
上記距離の絶対値が上記閾値以下である場合、上記第3の動き情報が上記サンプルセットに関して保存されることを決定する段階、
を含む、項目1に記載の方法。
(項目3)
上記距離の上記絶対値が上記閾値よりも大きい場合、上記方法は、
上記距離が正である場合、上記第1の動き情報が上記サンプルセットに関して保存されることを決定する段階、又は、
上記距離が負である場合、上記第2の動き情報が上記サンプルセットに関して保存されることを決定する段階、
をさらに備える、項目2に記載の方法。
(項目4)
上記閾値は予め定められている、項目1~3のいずれか1項に記載の方法。
(項目5)
上記閾値は、上記共通の境界と水平方向又は垂直方向との間の幾何学的関係に基づく、項目1~4のいずれか1項に記載の方法。
(項目6)
上記閾値は、上記共通の境界の直交方向と、上記水平方向又は上記垂直方向との間の角度に基づく、項目5に記載の方法。
(項目7)
上記閾値は、上記現在のブロックの幅及び/又は高さに基づく、項目1~6のいずれか1項に記載の方法。
(項目8)
上記共通の境界は、角度パラメータ及び距離パラメータによって決定され、上記現在のブロック内の上記サンプルセットと上記共通の境界との間の上記距離を決定する前に、上記方法は、
上記角度パラメータ及び上記距離パラメータを決定する段階、
をさらに備える、項目1~7のいずれか1項に記載の方法。
(項目9)
デコーダでは、上記角度パラメータ及び上記距離パラメータを決定する段階は、
ビットストリームから上記角度パラメータ及び上記距離パラメータをパースする段階、又は、
上記ビットストリームからインジケータをパースする段階と、
上記インジケータに基づいて上記角度パラメータ及び上記距離パラメータを取得する段階と、
を含む、項目8に記載の方法。
(項目10)
上記角度パラメータ及び上記距離パラメータを決定する段階の後に、上記方法は、
上記角度パラメータに基づいて第1の計算パラメータを決定する段階と、
上記角度パラメータに基づいてtemp角度パラメータを計算する段階と、
上記temp角度パラメータに基づいて第2の計算パラメータを決定する段階と、
上記角度パラメータ及び上記距離パラメータに基づいて第3の計算パラメータを計算する段階と、
をさらに備える、項目8又は9に記載の方法。
(項目11)
上記第1の計算パラメータは、上記角度パラメータに従って、予め設定されたルックアップテーブルをチェックすることによって決定され、上記第2の計算パラメータは、上記temp角度パラメータに従って、上記ルックアップテーブルをチェックすることによって決定され、上記第1の計算パラメータ及び上記第2の計算パラメータは、それぞれ、同じ角度のコサイン値及びサイン値である、項目10に記載の方法。
(項目12)
上記距離は、以下によって計算され、
distFromLine=(x+K)*P1+(y+K)*P2-P3
P1、P2、及びP3は、それぞれ、上記第1の計算パラメータ、上記第2の計算パラメータ、及び上記第3の計算パラメータであり、distFromLineは、上記距離を表し、Kは、非負の整数であり、xは、上記サンプルセットにおけるターゲット位置の水平座標を表し、yは、矩形座標系における上記ターゲット位置の垂直座標を表し、上記現在のブロックの左上サンプルの位置は、座標原点として設定され、右方向は、正の水平方向として設定され、下方向は、正の垂直方向として設定される、項目10又は11に記載の方法。
(項目13)
Kは1に等しい、項目12に記載の方法。
(項目14)
上記ターゲット位置は、上記サンプルセットにおいて予め定められている、項目12又は13に記載の方法。
(項目15)
上記予め定められた位置は、上記サンプルセットの左上位置又は上記サンプルセットの中心位置である、項目14に記載の方法。
(項目16)
上記距離のサンプル精度は、整数サンプルよりも高く、
対応して、上記距離は、以下によって計算され、
distFromLine=((x<<N)+K)*P1+((y<<N)+K)*P2-P3
2Nは、上記距離の上記サンプル精度の逆数を表す、項目12~15のいずれか1項に記載の方法。
(項目17)
Nは1に等しい、項目13に記載の方法。
(項目18)
上記サンプルセットは、上記現在のブロックのルマサンプルセットである、項目1~17のいずれか1項に記載の方法。
(項目19)
上記現在のブロック内の上記サンプルセットと上記共通の境界との間の上記距離を決定する前に、上記方法は、
上記現在のブロックを複数のサンプルセットに分割する段階であって、上記複数のサンプルセットのそれぞれが上記サンプルセットと同じサイズを有する、分割する段階、又は、
上記現在のブロックを上記サンプルセットとして設定する段階、
をさらに備える、項目1~18のいずれか1項に記載の方法。
(項目20)
上記サンプルセットは、4×4サンプルアレイである、項目1~19のいずれか1項に記載の方法。
(項目21)
上記複数のサンプルセットのそれぞれは、各動き情報保存ユニットに対応し、上記動き情報保存ユニットは、上記第1の動き情報、上記第2の動き情報、及び上記第3の動き情報のうちの1つを保存するために使用される、項目18又は19に記載の方法。
(項目22)
上記第1のサブブロック及び上記第2のサブブロックは、三角形区分、台形区分、又は非対称矩形区分である、項目1~21のいずれか1項に記載の方法。
(項目23)
上記第1の動き情報は、第1の参照ピクチャリストに基づく動き情報を含み、上記第2の動き情報は、第2の参照ピクチャリストに基づく動き情報を含み、上記第3の動き情報は、上記第1の動き情報及び上記第2の動き情報を含む、項目1~22のいずれか1項に記載の方法。
(項目24)
動き情報保存装置であって、現在のブロックが第1のサブブロック及び第2のサブブロックからなり、上記第1のサブブロック及び上記第2のサブブロックは、共通の境界によって分離され、上記第1のサブブロックは、第1の動き情報に対応し、上記第2のサブブロックは、第2の動き情報に対応し、上記装置は、
上記現在のブロック内のサンプルセットと上記共通の境界との間の距離を決定するように構成されている計算モジュールと、
第3の動き情報が上記サンプルセットに関して保存されるか否かを決定するために、上記距離を閾値と比較するように構成されている比較モジュールであって、上記第3の動き情報は、上記第1の動き情報及び上記第2の動き情報によって導出される、比較モジュールと、
を備える、動き情報保存装置。
(項目25)
上記比較モジュールは、
上記距離の絶対値が上記閾値以下である場合、上記第3の動き情報が上記サンプルセットに関して保存されることを決定する、
ように構成されている、項目24に記載の装置。
(項目26)
上記距離の上記絶対値が上記閾値よりも大きい場合、上記比較モジュールは、
上記距離が正である場合、上記第1の動き情報が上記サンプルセットに関して保存されることを決定する、又は、
上記距離が負である場合、上記第2の動き情報が上記サンプルセットに関して保存されることを決定する、
ようにさらに構成されている、項目25に記載の装置。
(項目27)
上記閾値は予め定められている、項目24~26のいずれか1項に記載の装置。
(項目28)
上記閾値は、上記共通の境界と水平方向又は垂直方向との間の幾何学的関係に基づく、項目24~27のいずれか1項に記載の装置。
(項目29)
上記閾値は、上記共通の境界の直交方向と、上記水平方向又は上記垂直方向との間の角度に基づく、項目28に記載の装置。
(項目30)
上記閾値は、上記現在のブロックの幅及び/又は高さに基づく、項目24~29のいずれか1項に記載の装置。
(項目31)
上記共通の境界は、角度パラメータ及び距離パラメータによって決定され、上記計算モジュールは、
上記角度パラメータ及び上記距離パラメータを決定する、
ようにさらに構成されている、項目24~30のいずれか1項に記載の装置。
(項目32)
デコーダでは、上記計算モジュールは、
ビットストリームから上記角度パラメータ及び上記距離パラメータをパースする、又は、
上記ビットストリームからインジケータをパースし、
上記インジケータに基づいて上記角度パラメータ及び上記距離パラメータを取得する、
ようにさらに構成されている、項目31に記載の装置。
(項目33)
上記計算モジュールは、
上記角度パラメータに基づいて第1の計算パラメータを決定し、
上記角度パラメータに基づいてtemp角度パラメータを計算し、
上記temp角度パラメータに基づいて第2の計算パラメータを決定し、
上記角度パラメータ及び上記距離パラメータに基づいて第3の計算パラメータを計算する、
ようにさらに構成されている、項目31又は32に記載の装置。
(項目34)
上記第1の計算パラメータは、上記角度パラメータに従って、予め設定されたルックアップテーブルをチェックすることによって決定され、上記第2の計算パラメータは、上記temp角度パラメータに従って、上記ルックアップテーブルをチェックすることによって決定され、上記第1の計算パラメータ及び上記第2の計算パラメータは、それぞれ、同じ角度のコサイン値及びサイン値である、項目33に記載の装置。
(項目35)
上記距離は、以下によって計算され、
distFromLine=(x+K)*P1+(y+K)*P2-P3
P1、P2、及びP3は、それぞれ、上記第1の計算パラメータ、上記第2の計算パラメータ、及び上記第3の計算パラメータであり、distFromLineは、上記距離を表し、Kは、非負の整数であり、xは、上記サンプルセットにおけるターゲット位置の水平座標を表し、yは、矩形座標系における上記ターゲット位置の垂直座標を表し、上記現在のブロックの左上サンプルの位置は、座標原点として設定され、右方向は、正の水平方向として設定され、下方向は、正の垂直方向として設定される、項目33又は34に記載の装置。
(項目36)
Kは1に等しい、項目35に記載の装置。
(項目37)
上記ターゲット位置は、上記サンプルセットにおいて予め定められている、項目35又は36に記載の装置。
(項目38)
上記予め定められた位置は、上記サンプルセットの左上位置である、又は、上記サンプルセットの中心位置である、項目37に記載の装置。
(項目39)
上記距離のサンプル精度は、整数サンプルよりも高く、
対応して、上記距離は、以下によって計算され、
distFromLine=((x<<N)+K)*P1+((y<<N)+K)*P2-P3
2Nは、上記距離の上記サンプル精度の逆数を表す、項目35~38のいずれか1項に記載の装置。
(項目40)
Nは1に等しい、項目36に記載の装置。
(項目41)
上記サンプルセットは、上記現在のブロックのルマサンプルセットである、項目24~40のいずれか1項に記載の装置。
(項目42)
上記装置は、
上記現在のブロックを複数のサンプルセットに分割し、上記複数のサンプルセットのそれぞれが上記サンプルセットと同じサイズを有する、又は、
上記現在のブロックを上記サンプルセットとして設定する、
ように構成されている分割モジュールをさらに備える、項目24~41のいずれか1項に記載の装置。
(項目43)
サンプルセットは4×4サンプルアレイである、項目24~42のいずれか1項に記載の装置。
(項目44)
上記複数のサンプルセットのそれぞれは、各動き情報保存ユニットに対応し、上記動き情報保存ユニットは、上記第1の動き情報、上記第2の動き情報、及び上記第3の動き情報のうちの1つを保存するために使用される、項目42又は43に記載の装置。
(項目45)
上記第1のサブブロック及び上記第2のサブブロックは、三角形区分、非対称矩形区分、又は台形区分である、項目24~44のいずれか1項に記載の装置。
(項目46)
上記第1の動き情報は、第1の参照ピクチャリストに基づく動き情報を含み、上記第2の動き情報は、第2の参照ピクチャリストに基づく動き情報を含み、上記第3の動き情報は、上記第1の動き情報及び上記第2の動き情報を含む、項目24~45のいずれか1項に記載の装置。
(項目47)
プロセッサとメモリとを備える、ビデオストリームをデコードする装置であって、上記メモリは、上記プロセッサに項目1~23のいずれか1項に記載の方法を実行させる命令を記憶している、装置。
(項目48)
プロセッサとメモリとを備える、ビデオストリームをエンコードする装置であって、上記メモリは、上記プロセッサに項目1~23のいずれか1項に記載の方法を実行させる命令を記憶している、装置。
(項目49)
実行されると、1又は複数のプロセッサがビデオデータをコードするように構成されているようにする命令を記憶したコンピュータ可読記憶媒体であって、上記命令は、上記1又は複数のプロセッサに項目1~23のいずれか1項に記載の方法を実行させる、コンピュータ可読記憶媒体。
(項目50)
コンピュータ上で実行されると、項目1~23のいずれか1項に記載の方法を実行するプログラムコードを備える、コンピュータプログラム。