JP2023508571A - 交差成分線形モデル予測のためのフィルタリングの方法及び装置 - Google Patents
交差成分線形モデル予測のためのフィルタリングの方法及び装置 Download PDFInfo
- Publication number
- JP2023508571A JP2023508571A JP2022540495A JP2022540495A JP2023508571A JP 2023508571 A JP2023508571 A JP 2023508571A JP 2022540495 A JP2022540495 A JP 2022540495A JP 2022540495 A JP2022540495 A JP 2022540495A JP 2023508571 A JP2023508571 A JP 2023508571A
- Authority
- JP
- Japan
- Prior art keywords
- luma
- subwidthc
- samples
- filter
- subheightc
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 552
- 238000001914 filtration Methods 0.000 title claims description 77
- 241000023320 Luma <angiosperm> Species 0.000 claims abstract description 837
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 claims abstract description 835
- 239000000523 sample Substances 0.000 claims description 410
- 230000008569 process Effects 0.000 claims description 145
- 238000012545 processing Methods 0.000 claims description 104
- 238000005070 sampling Methods 0.000 claims description 25
- 239000013074 reference sample Substances 0.000 claims description 11
- 238000004590 computer program Methods 0.000 claims description 7
- 230000001419 dependent effect Effects 0.000 claims description 5
- 238000009795 derivation Methods 0.000 abstract description 55
- 238000013139 quantization Methods 0.000 description 158
- 238000000638 solvent extraction Methods 0.000 description 68
- 101150076173 cntL gene Proteins 0.000 description 60
- 238000004891 communication Methods 0.000 description 58
- 230000006870 function Effects 0.000 description 54
- 239000013598 vector Substances 0.000 description 50
- 238000003491 array Methods 0.000 description 48
- 101150067055 minC gene Proteins 0.000 description 48
- 239000000872 buffer Substances 0.000 description 44
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 38
- 238000005192 partition Methods 0.000 description 38
- 238000010586 diagram Methods 0.000 description 34
- 230000005540 biological transmission Effects 0.000 description 30
- 230000000295 complement effect Effects 0.000 description 16
- 230000006835 compression Effects 0.000 description 16
- 238000007906 compression Methods 0.000 description 16
- 230000003044 adaptive effect Effects 0.000 description 14
- 101150039623 Clip1 gene Proteins 0.000 description 10
- 238000006243 chemical reaction Methods 0.000 description 10
- 238000013500 data storage Methods 0.000 description 10
- 238000007781 pre-processing Methods 0.000 description 8
- 230000002123 temporal effect Effects 0.000 description 8
- 239000004973 liquid crystal related substance Substances 0.000 description 6
- 239000011159 matrix material Substances 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 6
- 230000036961 partial effect Effects 0.000 description 6
- 238000012805 post-processing Methods 0.000 description 6
- 230000002829 reductive effect Effects 0.000 description 6
- 238000012360 testing method Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000009466 transformation Effects 0.000 description 6
- PXFBZOLANLWPMH-UHFFFAOYSA-N 16-Epiaffinine Natural products C1C(C2=CC=CC=C2N2)=C2C(=O)CC2C(=CC)CN(C)C1C2CO PXFBZOLANLWPMH-UHFFFAOYSA-N 0.000 description 4
- 101150114515 CTBS gene Proteins 0.000 description 4
- 230000002146 bilateral effect Effects 0.000 description 4
- 238000004422 calculation algorithm Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000012937 correction Methods 0.000 description 4
- 230000006837 decompression Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 230000018109 developmental process Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 239000000835 fiber Substances 0.000 description 4
- 238000009499 grossing Methods 0.000 description 4
- 238000007620 mathematical function Methods 0.000 description 4
- 238000005457 optimization Methods 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 4
- 230000011664 signaling Effects 0.000 description 4
- 230000003068 static effect Effects 0.000 description 4
- 230000007704 transition Effects 0.000 description 4
- 238000012952 Resampling Methods 0.000 description 2
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 230000003190 augmentative effect Effects 0.000 description 2
- 230000002457 bidirectional effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000001364 causal effect Effects 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 238000010276 construction Methods 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 238000002474 experimental method Methods 0.000 description 2
- 239000000284 extract Substances 0.000 description 2
- 238000009472 formulation Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000002427 irreversible effect Effects 0.000 description 2
- 238000012417 linear regression Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 229920001690 polydopamine Polymers 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 230000000007 visual effect Effects 0.000 description 2
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/132—Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/102—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
- H04N19/117—Filters, e.g. for pre-processing or post-processing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/134—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
- H04N19/157—Assigned coding mode, i.e. the coding mode being predefined or preselected to be further used for selection of another element or parameter
- H04N19/159—Prediction type, e.g. intra-frame, inter-frame or bidirectional frame prediction
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/17—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
- H04N19/176—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a block, e.g. a macroblock
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/10—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
- H04N19/169—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
- H04N19/186—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a colour or a chrominance component
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/50—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
- H04N19/593—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial prediction techniques
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N19/00—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
- H04N19/70—Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by syntax aspects related to video coding, e.g. related to compression standards
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
Description
現在ブロックが属するピクチャのクロマフォーマットに基づき、ブロックに属する(つまり、現在ブロックの内部サンプル)ルーマサンプル(例えば、各ルーマサンプル)に対するフィルタを決定することを含み、特に、異なるルーマサンプルは、異なるフィルタに対応し得る。基本的には、それが境界にあるかどうかに依存する。
現在ブロックに属するルーマサンプル(例えば、各ルーマサンプル)の位置で、決定されたフィルタを再構成されたルーマサンプルに適用して、フィルタ処理された再構成されたルーマサンプル(例えば、Rec’L[x,y])を取得する。
フィルタ処理された再構成されたルーマサンプルに基づき、線形モデル導出の入力として使用されるルーマサンプルのセットを取得する。
線形モデル導出の線形モデル係数及びフィルタ処理された再構成されたルーマサンプルに基づき交差成分予測(例えば、ルーマからクロマの交差成分予測又はCCLM予測)を実行する。
CCLM==chroma from luma。
現在ブロック内のルーマサンプルの位置及びクロマフォーマットに基づきフィルタを決定すること、又は
現在ブロック内のルーマサンプルの各々の位置及びクロマフォーマットに基づき、現在ブロックに属する複数のルーマサンプルに対する各々のフィルタを決定すること
を有する。現在ブロックに隣接するサンプルが利用可能である場合に、フィルタは、現在ブロックの境界エリアをフィルタ処理するためにそれらも使用し得る。
現在ブロックが属するピクチャのクロマフォーマット、
現在ブロック内のルーマサンプルの位置、
現在ブロックに属するルーマサンプルの数、
現在ブロックの幅及び高さ、及び
現在ブロック内のルーマサンプルに対するサブサンプリングされたクロマサンプルの位置
のうちの1つ以上に基づき、フィルタを決定することを有する。
サブサンプリングされたクロマサンプルが対応するルーマサンプルと同一位置にある場合に、複数のフィルタと現在ブロックの幅及び高さの値との間の第2又は第3関係(例えば、表2又は表3のどちらか一方)が、フィルタの決定のために使用される。
フィルタ処理された再構成されたルーマサンプル(例えば、Rec’L[x,y])からサブサンプリングされる境界ルーマ再構成サンプルを有する。
predC(i,j)=α・recL’(i,j)+β
に基づき取得される。ここで、predC(i,j)は、クロマサンプルを表し、recL(i,j)は、対応する再構成されたルーマサンプルを表す。
線形モデル(例えば、交差成分線形モデル,CCLM、又は多方向線形モデル,MDLM)を用いてイントラ予測を実行することと、
複数のシンタックス要素を含むビットストリームを生成することであり、複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素(例えば、CCLMのルーマフィルタの選択、特に、sps_cclm_colocated_chroma_flagのような、SPSフラグ)を含む、ことと
を有する方法に関係がある。
シンタックス要素の値が1又はTRUEであるとき、フィルタは、線形モデル決定及び予測のためにルーマサンプルに適用されない。
複数のシンタックス要素をビットストリームからパースすることであり、複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素(例えば、CCLMのルーマフィルタの選択、特に、sps_cclm_colocated_chroma_flagのような、SPSフラグ)を含む、ことと、
示された線形モデル(例えば、CCLM)を用いてイントラ予測を実行することと
を有する方法に関係がある。
シンタックス要素の値が1又はTRUEであるとき、フィルタは、線形モデル決定及び予測のためにルーマサンプルに適用されない。例えば、同一位置にある場合に、ルーマフィルタを使用しない。
1つ以上のプロセッサと、
プロセッサへ結合され、プロセッサによって実行されるプログラミングを記憶している非一時的なコンピュータ可読記憶媒体と
を有し、プログラミングは、プロセッサによって実行される場合に、第1若しくは第2の態様、又は第1若しくは第2若しくは第3の態様のとり得る実施形態に係る方法を実行するようにデコーダを構成する、デコーダに関係がある。
1つ以上のプロセッサと、
プロセッサへ結合され、プロセッサによって実行されるプログラミングを記憶している非一時的なコンピュータ可読記憶媒体と
を有し、プログラミングは、プロセッサによって実行される場合に、第1若しくは第2の態様、又は第1若しくは第2若しくは第3の態様のとり得る実施形態に係る方法を実行するようにエンコーダを構成する、エンコーダに関係がある。
現在ブロックが属するピクチャのクロマフォーマットに基づき、ブロックに属するルーマサンプル(例えば、各ルーマサンプル)に対するフィルタを決定するよう構成される決定ユニットと、
現在ブロックに属するルーマサンプル(例えば、各ルーマサンプル)の位置で、決定されたフィルタを再構成されたルーマサンプルに適用して、フィルタ処理された再構成されたルーマサンプル(例えば、Rec’L[x,y])を取得するよう構成されるフィルタリングユニットと、
フィルタ処理された再構成されたルーマサンプルに基づき、線形モデル導出の入力として使用されるルーマサンプルのセットを取得するよう構成される取得ユニットと、
線形モデル導出の線形モデル係数及びフィルタ処理された再構成されたルーマサンプルに基づき交差成分予測(例えば、ルーマからクロマの交差成分予測又はCCLM予測)を実行するよう構成される予測ユニットと
を有する装置に関係がある。
現在ブロックが属するピクチャのクロマフォーマットに基づきダウンサンプリングフィルタの組を決定するステップと、
再構成された隣接する上側ルーマサンプルが利用可能でないとき、再構成されたルーマブロックからのパディングによって隣接サンプルの2つの上行を取得するステップと、
再構成された隣接する左側ルーマサンプルが利用可能でないとき、再構成されたルーマサンプルからのパディングによって隣接サンプルの3つの左列を取得するステップと、
現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを取得するステップと、
ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを、取得された隣接サンプルの2つの上行のうちの選択されたサンプルに適用することによって、上側のダウンサンプリングされたルーマ参照サンプルを取得するステップであり、選択されたサンプルが左上位置(1202)にあるとき、各々のダウンサンプリングフィルタは、再構成された隣接サンプルとパディングされた隣接サンプルとの組み合わせに適用される、ステップと、
ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを、取得された隣接サンプルの3つの左列のうちの選択されたサンプルに適用することによって、左側のダウンサンプリングされたルーマ参照サンプルを取得するステップと、
上側若しくは左側又は上側及び左側の組み合わせのダウンサンプリングされたルーマ参照サンプルと、ダウンサンプリングされたルーマ参照サンプルに対応するクロマ参照サンプルとに基づき、1つ以上の線形モデル係数を決定するステップと、
線形モデル係数及びルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルに基づき、ルーマブロックに対応するクロマブロックの予測サンプルを取得するステップと
を有する。
ABT:asymmetric BT
AMVP:advanced motion vector prediction
ASIC:application-specific integrated circuit
AVC:Advanced Video Coding
B:bidirectional prediction
BT:binary tree
CABAC:context-adaptive binary arithmetic coding
CAVLC:context-adaptive variable-length coding
CD:compact disc
CD-ROM:compact disc read-only memory
CPU:central processing unit
CRT:cathode-ray tube
CTU:coding tree unit
CU:coding unit
DASH:Dynamic Adaptive Streaming over HTTP
DCT:discrete cosine transform
DMM:depth modeling mode
DRAM:dynamic random-access memory
DSL:digital subscriber line
DSP:digital signal processor
DVD:digital video disc
EEPROM:electrically-erasable programmable read-only memory
EO:electrical-to-optical
FPGA:field-programmable gate array
FTP:File Transfer Protocol
GOP:group of pictures
GPB:generalized P/B
GPU:graphics processing unit
HD:high-definition
HEVC:High Efficiency Video Coding
HM:HEVC Test Model
I:intra-mode
IC:integrated circuit
ISO/IEC:International Organization for Standardization/International Electrotechnical Commission
ITU-T:International Telecommunications Union Telecommunication Standardization Sector
JVET:Joint Video Exploration Team
LCD:liquid-crystal display
LCU:largest coding unit
LED:light-emitting diode
MPEG:Motion Picture Expert Group
MPEG-2:Motion Picture Expert Group 2
MPEG-4:Motion Picture Expert Group 4
MTT:multi-type tree
mux-demux:multiplexer-demultiplexer
MV:motion vector
NAS:network-attached storage
OE:optical-to-electrical
OLED:organic light-emitting diode
PIPE:probability interval portioning entropy
P:unidirectional prediction
PPS:picture parameter set
PU:prediction unit
QT:quadtree, quaternary tree
QTBT:quadtree plus binary tree
RAM:random-access memory
RDO:rate-distortion optimization
RF:radio frequency
ROM:read-only memory
Rx:receiver unit
SAD:sum of absolute differences
SBAC:syntax-based arithmetic coding
SH:slice header
SPS:sequence parameter set
SRAM:static random-access memory
SSD:sum of squared differences
SubCE:SubCore Experiment
TCAM:ternary content-addressable memory
TT:ternary tree
Tx:transmitter unit
TU:transform unit
UDP:User Datagram Protocol
VCEG:Video Coding Experts Group
VTM:VVC Test Model
VVC:Versatile Video Coding
図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は、ハイブリッドビデオエンコーダ、又はハイブリッドビデオコーデックに従うビデオエンコーダとも呼ばれ得る。
エンコーダ20は、例えば、入力部202を介して、ピクチャ17(又はピクチャデータ17)、例えば、ビデオ又はビデオシーケンスを形成するピクチャの連続の中のピクチャ、を受け取るよう構成されてよい。受け取られたピクチャ又はピクチャデータは、前処理されたピクチャ19(又は前処理されたピクチャデータ19)であってもよい。簡単のために、以下の説明はピクチャ17に言及する。ピクチャ17は、現在のピクチャ又はコーディングされるべきピクチャとも呼ばれ得る(特に、ビデオコーディングにおいて、現在のピクチャを他のピクチャ、例えば、同じビデオシーケンス、すなわち、現在のピクチャも含むビデオシーケンスの、前に符号化及び/又は復号されたピクチャと区別するため)。
残差計算ユニット204は、ピクチャブロック203及び予測ブロック265(予測ブロック265に関する更なる詳細は後述される)に基づいて、例えば、サンプル領域で残差ブロック205を取得するようサンプルごとに(ピクセルごとに)ピクチャブロック203のサンプル値から予測ブロック265のサンプル値を減じることによって、残差ブロック205(残差205とも呼ばれる)を計算するよう構成されてよい。
変換処理ユニット206は、変換領域で変換係数207を取得するために残差ブロック205のサンプル値に対して変換、例えば、離散コサイン変換(DCT)又は離散サイン変換(DST)を適用するよう構成されてよい。変換係数207は、変換残差係数とも呼ばれ、変換領域での残差ブロック205を表し得る。
量子化ユニット208は、例えば、スカラー量子化又はベクトル量子化を適用することによって、量子化された係数209を取得するように変換係数207を量子化するよう構成されてよい。量子化された係数209は、量子化された変換係数209又は量子化された残差係数209とも呼ばれ得る。
逆量子化ユニット210は、例えば、量子化ユニット208と同じ量子化ステップサイズに基づいて又はそれを用いて、量子化ユニット208によって適用された量子化スキームの逆を適用することによって、逆量子化された係数211を取得するために、量子化された係数に対して量子化ユニット208の逆の量子化を適用するよう構成される。逆量子化された係数211は、逆量子化された残差係数211とも呼ばれ、通常は量子化による損失により変換係数と同じでないが、変換係数207に対応し得る。
逆変換処理ユニット212は、再構成された残差ブロック213(又は対応する逆量子化された係数213)をサンプル領域で取得するために、変換処理ユニット206によって適用された変換の逆変換、例えば、逆離散コサイン変換(DCT)若しくは逆離散サイン変換(DST)又は他の逆変換を適用するよう構成される。再構成された残差ブロック213は、変換ブロック213とも呼ばれ得る。
再構成ユニット214(例えば、加算器又は合算器214)は、例えば、再構成された残差ブロック213のサンプル値と予測ブロック265のサンプル値とをサンプルごとに足すことによって、再構成されたブロック215をサンプル領域で取得するために変換ブロック213(すなわち、再構成された残差ブロック213)を予測ブロック265に加えるよう構成される。
ループフィルタユニット220(略して「ループフィルタ」220)は、再構成されたブロック215にフィルタをかけてフィルタ処理されたブロック221を取得するよう、又は一般的に、再構成されたサンプルにフィルタをかけてフィルタ処理されたサンプルを取得するよう構成される。ループフィルタユニットは、例えば、ピクセル遷移を滑らかにするよう、あるいは、別なふうにビデオ品質を改善するよう構成される。ループフィルタユニット220は、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ又は1つ以上の他のフィルタ、例えば、バイラテラルフィルタ、適応ループフィルタ(ALF)、先鋭化、平滑化フィルタ若しくは協調フィルタ、又はそれらの任意の組み合わせなどの1つ以上のループフィルタを有してよい。ループフィルタユニット220はインループフィルタであるものとして図2では示されているが、他の構成では、ループフィルタユニット220はポストループフィルタとして実装されてもよい。フィルタ処理されたブロック221は、フィルタ処理された再構成されたブロック221とも呼ばれ得る。
復号化ピクチャバッファ(DPB)230は、ビデオエンコーダ20によってビデオデータを符号化するための参照ピクチャ、又は一般的に、参照ピクチャデータを記憶するメモリであってよい。DPB230は、同期DRAM(SDRAM)を含む動的ランダム・アクセス・メモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、又は他のタイプのメモリデバイスなどの様々なメモリデバイスのいずれかによって形成されてよい。復号化ピクチャバッファ(DPB)230は、1つ以上のフィルタ処理されたブロック221を記憶するよう構成されてよい。復号化ピクチャバッファ230は、同じ現在ピクチャの、又は異なるピクチャ、例えば、前に再構成されたピクチャの、他の前にフィルタ処理されたブロック、例えば、前に再構成されフィルタ処理されたブロック221を記憶するよう更に構成されてよく、例えば、インター予測のために、完全な、前に再構成された、すなわち、復号されたピクチャ(並びに対応する参照ブロック及びサンプル)及び/又は部分的に再構成された現在ピクチャ(並びに対応する参照ブロック及びサンプル)を提供してよい。復号化ピクチャバッファ(DPB)230はまた、例えば、再構成されたブロック215がループフィルタユニット220によってフィルタをかけられていない場合に、1つ以上のフィルタ処理されていない再構成されたブロック215、又は一般的に、フィルタ処理されていない再構成されたサンプルを、あるいは、再構成されたブロック又はサンプルのあらゆる他の更に処理されたバージョンを記憶するよう構成されてもよい。
モード選択ユニット260は、パーティショニングユニット262、インター予測ユニット244及びイントラ予測ユニット254を有し、原ピクチャデータ、例えば、元のブロック203(現在ピクチャ17の現在ブロック203)と、再構成されたピクチャデータ、例えば、同じ(現在)ピクチャの及び/又は1つ若しくは複数の前に復号されたピクチャからの、例えば、復号化ピクチャバッファ230若しくは他のバッファ(例えば、ラインバッファ、図示せず)からのフィルタ処理された及び/又はフィルタ処理されていない再構成されたサンプル又はブロックを受信又は取得するよう構成される。再構成されたピクチャデータは、予測ブロック265又は予測子265を取得するために、予測、例えば、インター予測又はイントラ予測、のための参照ピクチャデータとして使用される。
パーティショニングユニット262は、現在ブロック203をより小さいパーティション、例えば、正方形又は長方形サイズのより小さいブロックにパーティション化(又は分割)してよい。これらのより小さいブロック(サブブロックとも呼ばれる)は、より一層小さいパーティションに更にパーティション化されてもよい。これは、ツリーパーティショニング又は階層ツリーパーティショニングとも呼ばれ、例えば、根ツリーレベル0(階層レベル0、デプス0)での、ルートブロックは、再帰的にパーティション化されてよく、例えば、次に下のツリーレベルの2つ以上のブロック、例えば、ツリーレベル1(階層レベル1、デプス1)でのノードにパーティション化され、これらのブロックは、例えば、終了基準が満足されること、例えば、最大ツリーデプス又は最小ブロックサイズに達することで、パーティショニングが終了するまで、次に下のレベル、例えば、ツリーレベル2(階層レベル2、デプス2)など、の2つ以上のブロックに再びパーティション化されてよい。これ以上パーティション化されないブロックは、ツリーのリーフブロック又はリーフノードとも呼ばれる。2つのパーティションにパーティション化することによるツリーは、二分木(BT)と呼ばれ、3つのパーティションにパーティション化することによるツリーは、三分木(TT)と呼ばれ、4つのパーティションにパーティション化することによるツリーは、四分木(QT)と呼ばれる。
イントラ予測モードの組は、35個の異なるイントラ予測モード、例えば、DC(又は平均)モード及びプレーナーモードのような無指向性モード、又は例えば、HEVCで定義されるような、指向性モードを有してよく、あるいは、67個の異なるイントラ予測モード、例えば、DC(又は平均)モード及びプレーナーモードのような無指向性モード、又は例えば、VVCで定義されるような、指向性モードを有してよい。
(とり得る)インター予測モードの組は、利用可能な参照ピクチャ(すなわち、例えば、DBP230に記憶されている、前の、少なくとも部分的に復号されたピクチャ)及び他のインター予測パラメータ、例えば、参照ピクチャ全体又は参照ピクチャの一部分のみ、例えば、現在ブロックのエリアの周りの探索窓エリア、が最良の一致を示す参照ブロックを探すために使用されるかどうか、及び/又は例えば、ピクセル補間、例えば、ハーフ/セミペル及び/又は4分の1ペル補間、が適用されるか否か、に依存する。
エントロピ符号化ユニット270は、出力部272を介して、例えば、符号化されたビットストリーム21の形で、出力され得る符号化されたピクチャデータ21を取得するために、量子化された係数209、インター予測パラメータ、イントラ予測パラメータ、ループフィルタパラメータ及び/又は他のシンタックス要素に対して、例えば、エントロピ符号化アルゴリズム又はスキーム(例えば、可変長コーディング(VLC)スキーム、コンテキスト適応VLCスキーム(CAVLC)、算術コーディングスキーム、二値化、コンテキスト適応二値算術コーディング(CABAC)、シンタックスに基づくコンテキスト適応二値算術コーディング(SBAC)、確率区間パーティショニングエントロピ(PIPE)コーディング、又は他のエントロピ符号化メソッドロジ若しくは技術)を適用するか、あるいは、バイパスする(無圧縮)よう構成され、それにより、例えば、ビデオデコーダ30は、パラメータを受け取って復号化のために使用し得る。符号化されたビットストリーム21は、ビデオデコーダ30へ送られるか、あるいは、ビデオデコーダ30による後の伝送又は読み出しのためにメモリに記憶されてもよい。
図3は、本願の技術を実装するよう構成されるビデオデコーダ30の例を示す。ビデオデコーダ30は、復号されたピクチャ331を取得するために、例えば、エンコーダ20によって符号化された、符号化ピクチャデータ21(例えば、符号化ビットストリーム21)を受信するよう構成される。符号化ピクチャデータ又はビットストリームは、符号化ピクチャデータを復号するための情報、例えば、符号化されたビデオスライスのピクチャブロック及び関連するシンタックス要素を表すデータ、を含む。
エントロピ復号化ユニット304は、ビットストリーム21(又は一般に、符号化ピクチャデータ21)をパースし、符号化ピクチャデータ21に対して、例えば、エントロピ復号化を実行して、例えば、量子化された係数309及び/又は復号されたコーディングパラメータ(図3に図示せず)、例えば、インター予測パラメータ(例えば、参照ピクチャインデックス及び動きベクトル)、イントラ予測パラメータ(例えば、イントラ予測モード又はインデックス)、変換パラメータ、量子化パラメータ、ループフィルタパラメータ、及び/又は他のシンタックス要素のいずれか又は全てを取得するよう構成される。エントロピ復号化ユニット304は、エンコーダ20のエントロピ符号化ユニット270に関して説明された符号化スキームに対応する復号化アルゴリズム又はスキームを適用するよう構成されてよい。エントロピ復号化ユニット304は、インター予測パラメータ、イントラ予測パラメータ、及び/又は他のシンタックス要素をモード適用ユニット360へ、及び他のパラメータをデコーダ30の他のユニットへ供給するよう更に構成されてよい。ビデオデコーダ30は、ビデオスライスレベル及び/又はビデオブロックレベルでシンタックス要素を受け取ってよい。スライス及び各々のシンタックス要素に加えて、又はそれらに代えて、グループ及び/又はタイル並びに各々のシンタックス要素が受信及び/又は使用されてもよい。
逆量子化ユニット310は、(例えば、エントロピ復号化ユニット304によって、例えば、パース及び/又は復号することによって)符号化ピクチャデータ21から量子化パラメータ(QP)(又は一般に、逆量子化に関する情報)及び量子化された係数を受け取り、量子化パラメータに基づいて、復号された量子化された係数309に対して逆量子化を適用して、変換係数311とも呼ばれ得る逆量子化された係数311を取得するよう構成されてよい。逆量子化プロセスは、量子化の程度及び、同様に、適用されるべき逆量子化の程度、を決定するために、ビデオスライス内の各ビデオブロックについてビデオエンコーダ20によって決定された量子化パラメータの使用を含んでよい。
逆変換処理ユニット312は、変換係数311とも呼ばれる逆量子化された係数311を受け取り、そして、再構成された残差ブロック213をサンプル領域で取得するために、逆量子化された係数311に対して変換を適用するよう構成されてよい。再構成された残差ブロック213は、変換ブロック313とも呼ばれ得る。変換は、逆変換、例えば、逆DCT、逆DST、逆整数変換、又は概念的に類似した逆変換プロセスであってよい。逆変換処理ユニット312は、逆量子化された係数311に適用されるべき変換を決定するために(例えば、エントロピ復号化ユニット304によって、例えば、パース及び/又は復号することによって)符号化ピクチャデータ21から変換パラメータ又は対応する情報を受け取るよう更に構成されてもよい。
再構成ユニット314(例えば、加算器又は合算器314)は、例えば、再構成された残差ブロック313のサンプル値と予測ブロック365のサンプル値とを足すことによって、再構成されたブロック315をサンプル領域で取得するように、再構成された残差ブロック313を予測ブロック365に加えるよう構成されてよい。
ループフィルタユニット320(コーディングループ内にあるか又はコーディングループの後にあるかのどちらか)は、フィルタ処理されたブロック321を取得するために、例えば、ピクセル遷移を滑らかにするか又は別なふうにビデオ品質を改善するために、再構成されたブロック315にフィルタをかけるよう構成される。ループフィルタユニット320は、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ又は1つ以上の他のフィルタ、例えば、バイラテラルフィルタ、適応ループフィルタ(ALF)、先鋭化、平滑化フィルタ若しくは協調フィルタ、又はそれらの任意の組み合わせなどの1つ以上のループフィルタを有してよい。ループフィルタユニット320はインループフィルタであるものとして図3では示されているが、他の構成では、ループフィルタユニット320はポストループフィルタとして実装されてもよい。
ピクチャの復号されたビデオブロック321は、次いで、復号化ピクチャバッファ330に記憶される。復号化ピクチャバッファ330は、他のピクチャのその後の動き補償のために、及び/又は夫々表示を出力するために、復号されたピクチャ331を参照ピクチャとして記憶する。
インター予測ユニット344は、インター予測ユニット244と(特に、動き補償ユニットと)同じであってよく、イントラ予測ユニット354は、機能においてインター予測ユニット254と同じであってよく、符号化ピクチャデータ21から(例えば、エントロピ復号化ユニット304によって、例えば、パース及び/又は復号することによって)受け取られたパーティショニング及び/又は予測パラメータ、あるいは各々の情報に基づいて、分割又はパーティショニング決定及び予測を実行する。モード適用ユニット360は、再構成されたピクチャ、ブロック又は各々のサンプル(フィルタ処理された又はフィルタ処理されていない)に基づいてブロックごとに予測(イントラ又はインター予測)を実行して予測ブロック365を取得するよう構成されてよい。
ux=(mvx+2bitDepth)%2bitDepth (1)
mvx=(ux>=2bitDepth-1)?(ux-2bitDepth):ux (2)
uy=(mvy+2bitDepth)%2bitDepth (3)
mvy=(uy>=2bitDepth-1)?(uy-2bitDepth):uy (4)
ここで、mvxは、画像ブロック又はサブブロックの動きベクトルの水平成分であり、mvyは、画像ブロック又はサブブロックの動きベクトルの垂直成分であり、ux及びuyは、中間値を示す。例えば、mvxの値が-32769である場合に、式(1)及び(2)を適用した後に、結果として得られる値は32767である。コンピュータシステムでは、10進数は2の補数として記憶される。-32769の2の補数は、1,0111,1111,1111,1111(17ビット)であり、その場合に、MSBは捨てられるので、結果として得られる2の補数は、0111,1111,1111,1111(10進数は32767である)であり、これは、式(1)及び(2)を適用することによる出力と同じである。
ux=(mvpx+mvdx+2bitDepth)%2bitDepth (5)
mvx=(ux>=2bitDepth-1)?(ux-2bitDepth):ux (6)
uy=(mvpy+mvdy+2bitDepth)%2bitDepth (7)
mvy=(uy>=2bitDepth-1)?(uy-2bitDepth):uy (8)
式(5)から(8)に示されるように、演算は、mvp及びmvdの合算中に適用されてよい。
vx=Clip3(-2bitDepth-1,2bitDepth-1-1,vx)
vy=Clip3(-2bitDepth-1,2bitDepth-1-1,vy)
ここで、vxは、画像ブロック又はサブブロックの動きベクトルの水平成分であり、vyは、画像ブロック又はサブブロックの動きベクトルの垂直成分であり、x、y及びzは、夫々、MVクリッピングプロセスの3つの入力値に対応し、関数Clip3の定義は、次の通りである:
C(x,y)=α×L(x,y)+β
ここで、C及びLは、夫々、クロマ値及びルーマ値を示す。パラメータα及びβは、次のように、最小二乗法によって導出される:
α=R(L,C)/R(L,L)
β=M(C)-α×M(L)
ここで、M(A)は、Aの平均を表し、R(A,B)は、次のように定義される:
R(A,B)=M((A-M(A))×(B-M(B))
α={C(B)-C(A)}/{L(B)-L(A)}
β=L(A)-αC(A)
ここで、B=argmax(L(n))及びA=argmin(L(n))は、ルーマサンプルでの最大及び最小値の位置である。
Rec’L[x,y]=(2×RecL[2x,2y]+2×RecL[2x,2y+1]+RecL[2x-1,2y]+RecL[2x+1,2y]+RecL[2x-1,2y+1]+RecL[2x+1,2y+1]+4)>>3
このダウンサンプリングは、ルーマサンプルの位置に対するクロマサンプルの位置について「type0」位相関係、つまり、水平方向ではコロケーテッドサンプリング及び垂直方向ではインタースティシャルサンプリング、を仮定している点に留意されたい。図9に示されている上記の6-タップダウンサンプリングは、単一モデルCCLMモード及び多重モデルCCLMモードの両方についてデフォルトフィルタとして使用される。6-タップダウンサンプリングフィルタによって使用されるサンプルの空間位置は、図9に示される。サンプル901、902、及び903は、夫々、2、1、及び0の重みを有する。
y=0で行がCTUの最初の行であり、x=0であり、かつ、左及び上の隣接ブロックが利用不可能であるならば、Rec’L[x,y]=RecL[2x,2y]であり、
y=0で行がCTUの最初の行であり、かつ、上の隣接ブロックが利用不可能であるならば、Rec’L[x,y]=(2×RecL[2x,2y]+RecL[2x-1,2y]+RecL[2x+1,2y]+2)>>2であり、
x=0であり、かつ、左及び上の隣接ブロックが利用不可能であるならば、Rec’L[x,y]=(RecL[2x,2y]+RecL[2x,2y+1]+1)>>1である。
このプロセスへの入力は:
- イントラ予測モードpredModeIntra、
- 現在ピクチャの左上サンプルに対する現在の変換ブロックの左上サンプルのサンプル位置(xTbC,yTbC)、
- 変換ブロックの幅を指定する変数nTbW、
- 変換ブロックの高さを指定する変数nTbH、
- x=-1,y=0..2*nTbH-1及びx=0..2*nTbW-1,y=-1であるクロマ隣接サンプルp[x][y]、である。
このプロセスの出力は、x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]である。
現在のルーマ位置(xTbY,yTbY)は、次のように導出される:
(xTbY,yTbY)=(xTbC<<1,yTbC<<1) (8-155)
変数availL、availT及びavailTLは、次のように導出される:
- ブロックの左隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC)を入力として用いて呼び出され、出力はavailLに割り当てられる。
- ブロックの上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC,yTbC-1)を入力として用いて呼び出され、出力はavailTに割り当てられる。
- ブロックの左上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC-1)を入力として用いて呼び出され、出力はavailTLに割り当てられる。
- 利用可能な右上隣接クロマサンプルの数numTopRightは、次のように導出される:
- 変数numTopRightは0に等しくセットされ、availTRはTRUEに等しくセットされる。
- predModeIntraがINTRA_T_CCLMに等しいとき、x=nTbW..2*nTbW-1について、availTRがFALSEに等しくなるか又はxが2*nTbW-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC+x,yTbC-1)を入力として用いて呼び出され、出力はavailableTRに割り当てられる。
- availableTRがTRUEに等しいとき、numTopRightは1だけインクリメントされる。
- 利用可能な左下隣接クロマサンプルの数numLeftBelowは、次のように導出される:
- 変数numLeftBelowは0に等しくセットされ、availLBはTRUEに等しくセットされる。
- predModeIntraがINTRA_L_CCLMに等しいとき、y=nTbH..2*nTbH-1について、availLBがFALSEに等しくなるか又はyが2*nTbH-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC+y)を入力として用いて呼び出され、出力はavailableLBに割り当てられる。
- availableLBがTRUEに等しいとき、numLeftBelowは1だけインクリメントされる。
上及び右上にある利用可能な隣接クロマサンプルの数numTopSamp並びに左及び左下にある利用可能な隣接クロマサンプルの数nLeftSampは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しいとき、次が適用される:
numSampT=availT?nTbW:0 (8-156)
numSampL=availL?nTbH:0 (8-157)
- そうでない場合には、次が適用される:
numSampT=(availT&&predModeIntra==INTRA_T_CCLM)?(nTbW+numTopRight):0 (8-158)
numSampL=(availL&&predModeIntra==INTRA_L_CCLM)?(nTbH+numLeftBelow):0 (8-159)
変数bCTUboundaryは、次のように導出される:
bCTUboundary=(yTbC&(1<<(CtbLog2SizeY-1)-1)==0)?TRUE:FALSE (8-160)
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]=1<<(BitDepthC-1)
(8-161)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*2-1,y=0..nTbH*2-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..2*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..2*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(pY[2*x][2*y-1]+pY[2*x-1][2*y]+4*pY[2*x][2*y]+pY[2*x+1][2*y]+pY[2*x][2*y+1]+4)>>3 (8-162)
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(pY[0][2*y-1]+pY[-1][2*y]+4*pY[0][2*y]+pY[1][2*y]+pY[0][2*y+1]+4)>>3 (8-163)
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(pY[0][2*y-1]+2*pY[0][2*y]+pY[0][2*y+1]+2)>>2 (8-164)
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=(pY[2*x][-1]+pY[2*x-1][0]+4*pY[2*x][0]+pY[2*x+1][0]+pY[2*x][1]+4)>>3 (8-165)
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=(pY[2*x-1][0]+2*pY[2*x][0]+pY[2*x+1][0]+2)>>2 (8-166)
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(pY[0][-1]+pY[-1][0]+4*pY[0][0]+pY[1][0]+pY[0][1]+4)>>3 (8-167)
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(pY[-1][0]+2*pY[0][0]+pY[1][0]+2)>>2 (8-168)
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(pY[0][-1]+2*pY[0][0]+pY[0][1]+2)>>2 (8-169)
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0] (8-170)
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(pY[2*x-1][2*y]+pY[2*x-1][2*y+1]+2*pY[2*x][2*y]+2*pY[2*x][2*y+1]+pY[2*x+1][2*y]+pY[2*x+1][2*y+1]+4)>>3 (8-171)
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(pY[-1][2*y]+pY[-1][2*y+1]+2*pY[0][2*y]+2*pY[0][2*y+1]+pY[1][2*y]+pY[1][2*y+1]+4)>>3 (8-172)
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(pY[0][2*y]+pY[0][2*y+1]+1)>>1 (8-173)
(外1)
は、フィルタバイパス動作(すなわち、出力値を入力値にセットすることによる)を含む異なる方法で実装されてよい。代替的に、それは、類似した加算及びシフト演算を用いて実装されてもよく、すなわち:
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=
(F[1][0]*pY[SubWidthC*x][SubHeightC*y-1]+
+F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]+
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F[1][0]*pY[0][SubHeightC*y-1]+
+F[0][1]*pY[-1][SubHeightC*y]+
+F[1][1]*pY[0][SubHeightC*y]+
+2)>>2
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(2*F[1][0]*pY[0][SubHeightC*y-1]+
+F[1][1]*pY[0][SubHeightC*y]+
+2)>>2
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]+
+F[0][1]*pY[SubWidthC*x-1][0]+
+F[1][1]*pY[SubWidthC*x][0]+
+F[2][1]*pY[SubWidthC*x+1][0]+
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]+
+F[0][1]*pY[SubWidthC*x-1][0]+
+F[1][1]*pY[SubWidthC*x][0]+
+F[2][1]*pY[SubWidthC*x+1][0]+
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=
(F[1][0]*pY[0][-1]+
+F[0][1]*pY[-1][0]+
+F[1][1]*pY[0][0]+
+F[2][1]*pY[1][0]+
+F[1][2]*pY[0][1]+4)>>3
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=
(F[0][1]*pY[-1][0]+
+F[1][1]*pY[0][0]+
+F[2][1]*pY[1][0]+
+2)>>2
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(pY[0][-1]+2*pY[0][0]+pY[0][1]+2)>>2 (8-169)
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0] (8-170)
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=
(F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+
+F[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]+
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+
+F[2][2]*pY[SubWidthC*x+1][SubHeghtC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F[0][1]*pY[-1][SubHeightC*y]+
+F[0][2]*pY[-1][SubHeightC*y+1]+
+F[1][1]*pY[0][SubHeightC*y]+
+F[1][2]*pY[0][SubHeightC*y+1]+
+F[2][1]*pY[1][SubHeightC*y]+
+F[2][2]*pY[1][SubHeghtC*y+1]+4)>>3
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
+F[1][1]*pY[0][SubHeightC*y]+
+F[1][2]*pY[0][SubHeightC*y+1]+1)>>1
8.4.4.2.8 INTRA_LT_CCLM、INTRA_L_CCLM及びINTRA_T_CCLMイントラ予測モードの仕様
このプロセスへの入力は:
- イントラ予測モードpredModeIntra、
- 現在ピクチャの左上サンプルに対する現在の変換ブロックの左上サンプルのサンプル位置(xTbC,yTbC)、
- 変換ブロックの幅を指定する変数nTbW、
- 変換ブロックの高さを指定する変数nTbH、
- x=-1,y=0..2*nTbH-1及びx=0..2*nTbW-1,y=-1であるクロマ隣接サンプルp[x][y]、である。
このプロセスの出力は、x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]である。
現在のルーマ位置(xTbY,yTbY)は、次のように導出される:
(xTbY,yTbY)=(xTbC<<(SubWidthC-1),yTbC<<(SubHeightC-1)) (8-156)
変数availL、availT及びavailTLは、次のように導出される:
- ブロックの左隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC)を入力として用いて呼び出され、出力はavailLに割り当てられる。
- ブロックの上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC,yTbC-1)を入力として用いて呼び出され、出力はavailTに割り当てられる。
- ブロックの左上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC-1)を入力として用いて呼び出され、出力はavailTLに割り当てられる。
- 利用可能な右上隣接クロマサンプルの数numTopRightは、次のように導出される:
- 変数numTopRightは0に等しくセットされ、availTRはTRUEに等しくセットされる。
- predModeIntraがINTRA_T_CCLMに等しいとき、x=nTbW..2*nTbW-1について、availTRがFALSEに等しくなるか又はxが2*nTbW-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC+x,yTbC-1)を入力として用いて呼び出され、出力はavailableTRに割り当てられる。
- availableTRがTRUEに等しいとき、numTopRightは1だけインクリメントされる。
- 利用可能な左下隣接クロマサンプルの数numLeftBelowは、次のように導出される:
- 変数numLeftBelowは0に等しくセットされ、availLBはTRUEに等しくセットされる。
- predModeIntraがINTRA_L_CCLMに等しいとき、y=nTbH..2*nTbH-1について、availLBがFALSEに等しくなるか又はyが2*nTbH-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC+y)を入力として用いて呼び出され、出力はavailableLBに割り当てられる。
- availableLBがTRUEに等しいとき、numLeftBelowは1だけインクリメントされる。
上及び右上にある利用可能な隣接クロマサンプルの数numTopSamp並びに左及び左下にある利用可能な隣接クロマサンプルの数nLeftSampは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しいとき、次が適用される:
numSampT=availT?nTbW:0
numSampL=availL?nTbH:0
- そうでない場合には、次が適用される:
numSampT=(availT&&predModeIntra==INTRA_T_CCLM)?(nTbW+numTopRight):0
numSampL=(availL&&predModeIntra==INTRA_L_CCLM)?(nTbH+numLeftBelow):0
変数bCTUboundaryは、次のように導出される:
bCTUboundary=(yTbC&(1<<(CtbLog2SizeY-1)-1)==0)?TRUE:FALSE
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]=1<<(BitDepthC-1)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDstY[x][y]=pY[x][y]
//説明のためだけ:YUV 4:4:4用のフィルタなし//
そうでない場合に、フィルタ{F3,F5,F6}の組について、次が適用される。//ここでは、係数を定義する//
F3[0]=1,F3[1]=2,F3[2]=1
- SubWidthC==2及びSubHeightC==2である場合
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,F2[1]=1
- その他の場合
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,F2[1]=0
- //本願の実施形態の太字部分を参照//
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、F5にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[1][0]*pY[SubWidthC*x][SubHeightC*y-1]+
+F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]+
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3
//ここで説明するためだけ:決定されたフィルタ及び“F”フィルタの他の全ての出現を適用//
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、F5にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[1][0]*pY[0][SubHeightC*y-1]+
+F[0][1]*pY[-1][SubHeightC*y]+
+F[1][1]*pY[0][SubHeightC*y]+
+F[2][1]*pY[1][SubHeightC*y]+
+F[1][2]*pY[0][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、F3にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y-1]+
+F[1]*pY[0][SubHeightC*y]+
+F[2]*pY[0][SubHeightC*y+1]+
+2)>>2
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、F5にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]+
+F[0][1]*pY[SubWidthC*x-1][0]+
+F[1][1]*pY[SubWidthC*x][0]+
+F[2][1]*pY[SubWidthC*x+1][0]+
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、F3にセットされたFについて、次のように導出される:
pDsY[x][0]=
=(F[0]*pY[SubWidthC*x-1][0]+
+F[1]*pY[SubWidthC*x][0]+
+F[2]*pY[SubWidthC*x+1][0]+2)>>2
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F5にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[1][0]*pY[0][-1]+
+F[0][1]*pY[-1][0]+
+F[1][1]*pY[0][0]+
+F[2][1]*pY[1][0]+
+F[1][2]*pY[0][1]+4)>>3
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[-1][0]+
+F[1]*pY[0][0]+
+F[2]*pY[1][0]+
+2)>>2
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[0][-1]+
+F[1]*pY[0][0]++F[2]*pY[0][1]+
+2)>>2
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0]
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、F6にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+
+F[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]+
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+
+F[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、F6にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0][1]*pY[-1][SubHeightC*y]+
+F[0][2]*pY[-1][SubHeightC*y+1]+
+F[1][1]*pY[0][SubHeightC*y]+
+F[1][2]*pY[0][SubHeightC*y+1]+
+F[2][1]*pY[1][SubHeightC*y]+
+F[2][2]*pY[1][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、F2にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y]+
+F[1]*pY[0][SubHeightC*y+1]+1)>>1
4.numSampLが0よりも大きいとき、y=0..numSampL-1である、ダウンサンプリングされた隣接する左ルーマサンプルpLeftDsY[y]は、次のように導出される:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- y=0..nTbH-1であるpLeftDsY[y]は、次のように導出される:pLeftDsY[y]=pY[-1][y]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- y=1..nTbH-1であるpLeftDsY[y]は、F5にセットされたFについて、次のように導出される:
pLeftDsY[y]=
=F[1][0]*pY[-SubWidthC][SubHeightC*y-1]+
+F[0][1]*pY[-1-SubWidthC][SubHeightC*y]+
+F[1][1]*pY[-SubWidthC][SubHeightC*y]+
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]+
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3
- availTLがTRUEに等しい場合に、pLeftDsY[0]は、F5にセットされたFについて、次のように導出される:
pLeftDsY[0]=
=F[1][0]*pY[-SubWidthC][-1]+
+F[0][1]*pY[-1-SubWidthC][0]+
+F[1][1]*pY[-SubWidthC][0]+
+F[2][1]*pY[1-SubWidthC][0]+
+F[1][2]*pY[-SubWidthC][1]+4)>>3
- そうでない場合に、x=1..nTbW-1であるpDsY[x][0]は、F3にセットされたFについて、次のように導出される:
pLeftDsY[0]=
=(F[0]*pY[-1-SubWidthC][0]+
+F[1]*pY[-SubWidthC][0]+
+F[2]*pY[1-SubWidthC][0]+
+2)>>2
- 他の場合に、F6にセットされたFについて、次が適用される:
pLeftDsY[y]=
=(F[0][1]*pY[-1-SubWidthC][SubHeightC*y]+
+F[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+
+F[1][1]*pY[-SubWidthC][SubHeightC*y]+
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]+
+F[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3
5.numSampTが0よりも大きいとき、x=0..numSampT-1である、ダウンサンプリングされた隣接する上ルーマサンプルpTopDsY[x]は、次のように定められる:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- x=0..numSampT-1について、pTopDsY[x]=pY[x][-1]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- x=1..numSampT-1であるpTopDsY[x]は、次のように導出される:
- bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pTopDsY[x]=
=(F[1][0]*pY[SubWidthC*x][-1-SubHeightC]+
+F[0][1]*pY[SubWidthC*x-1][-SubHeightC]+
+F[1][1]*pY[SubWidthC*x][-SubHeightC]+
+F[2][1]*pY[SubWidthC*x+1][-SubHeightC]+
+F[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pTopDsY[x]=
=(F[0]*pY[SubWidthC*x-1][-1]+
+F[1]*pY[SubWidthC*x][-1]+
+F[2]*pY[SubWidthC*x+1][-1]+
+2)>>2
- pTopDsY[0]は、次のように導出される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pTopDsY[0]=
=F[1][0]*pY[-1][-1-SubHeightC]+
+F[0][1]*pY[-1][-SubHeightC]+
+F[1][1]*pY[0][-SubHeightC]+
+F[2][1]*pY[1][-SubHeightC]++
+F[1][2]pY[-1][1-SubHeightC]++4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pTopDsY[0]=
=(F[0]*pY[-1][-1]+
+F[1]*pY[0][-1]+
+F[2]*pY[1][-1]+
+2)>>2
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、F3にセットされたFについて、次が適用される:
pTopDsY[0]=
=(F[0]*pY[0][-1]+
+F[1]*pY[0][-2]+
+F[2]*pY[0][-1]+
+2)>>2
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pTopDsY[0]=pY[0][-1]
- 他の場合に、次が適用される:
- x=1..numSampT-1であるpTopDsY[x]は、次のように導出される:
- bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pTopDsY[x]=
=(F[0][1]*pY[SubWidthC*x-1][-2]+
+F[0][2]*pY[SubWidthC*x-1][-1]+
+F[1][1]*pY[SubWidthC*x][-2]+
+F[1][2]*pY[SubWidthC*x][-1]+
+F[2][1]*pY[SubWidthC*x+1][-2]+
+F[2][2]*pY[SubWidthC*x+1][-1]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pTopDsY[x]=
=(F[0]*pY[SubWidthC*y-1][-1]+
+F[1]*pY[SubWidthC*y][-1]+
+F[2][1]*pY[SubWidthC*y+1][-1]+
+2)>>2
- pTopDsY[0]は、次のように導出される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pTopDsY[0]=
=(F[0][1]*pY[-1][-2]+
+F[0][2]*pY[-1][-1]+
+F[1][1]*pY[0][-2]+
+F[1][2]*pY[0][-1]+
+F[2][1]*pY[1][-2]+
+F[2][2]*pY[1][-1]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pTopDsY[0]=
=(F[0]*pY[-1][-1]+
+F[1]*pY[0][-1]+
+F[2]*pY[1][-1]+
+2)>>2
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、F2にセットされたFについて、次が適用される:
pTopDsY[0]=(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pTopDsY[0]=pY[0][-1]
6.変数nS、xS、ySは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しい場合に、次が適用される:
nS=((availL&&availT)?Min(nTbW,nTbH):(availL?nTbH:nTbW))
xS=1<<(((nTbW>nTbH)&&availL&&availT)?(Log2(nTbW)-Log2(nTbH)):0) (8-192)
yS=1<<(((nTbH>nTbW)&&availL&&availT)?(Log2(nTbH)-Log2(nTbW)):0) (8-193)
- そうではなく、predModeIntraがINTRA_L_CCLMに等しい場合に、次が適用される:
nS=numSampL
xS=1
yS=1
- その他の場合(predModeIntraがINTRA_T_CCLMに等しい場合)に、次が適用される:
nS=numSampT
xS=1
yS=1
7.変数minY、maxY、minC及びmaxCは、次のように導出される:
- 変数minYは、1<<(BitDepthY)+1に等しくセットされ、変数maxYは、-1に等しくセットされる。
- availTがTRUEに等しい場合に、x=0..nS-1として、変数minY、maxY、minC及びmaxCは、次のように導出される:
- minYがpTopDsY[x*xS]よりも大きい場合に、次が適用される:
minY=pTopDsY[x*sS]
minC=p[x*xS][-1]
- maxYがpTopDsY[x*xS]よりも小さい場合に、次が適用される:
maxY=pTopDsY[x*xS]
maxC=p[x*xS][-1]
- availLがTRUEに等しい場合に、y=0..nS-1として、変数minY、maxY、minC及びmaxCは、次のように導出される:
- minYがpLeftDsY[y*yS]よりも大きい場合に、次が適用される:
minY=pLeftDsY[y*yS]
minC=p[-1][y*yS]
- maxYがpLeftDsY[y*yS]よりも小さい場合に、次が適用される:
maxY=pLeftDsY[y*yS]
maxC=p[-1][y*yS]
8.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0
a=0
b=1<<(BitDepthC-1)
- そうでない場合に、次が適用される:
diff=maxY-minY
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC
x=Floor(Log2(diff))
normDiff=((diff<<4)>>x)&15
x+=(normDiff!=0)?1:0
y=Floor(Log2(Abs(diffC)))+1
a=(diffC*(divSigTable[normDiff]|8)+2y-1)>>y
k=((3+x-y)<1)?1:3+x-y
a=((3+x-y)<1)?Sign(a)*15:a
b=minC-((a*minY)>>k)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0
a=0
b=minC
9.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1C(((pDsY[x][y]*a)>>k)+b)
●LMモードが適用される場合に、W’=W,H’=H;
●LM-Aモードが適用される場合に、W’=W+H;
●LM-Lモードが適用される場合に、H’=H+W
としてセットされる。
●LMモードが適用され、上側及び左側の両方の隣接サンプルが利用可能である場合に、S[W’/4,-1]、S[3W’/4,-1]、S[-1,H’/4]、S[-1,3H’/4];
●LM-Aモードが適用されるか、あるいは、上隣接サンプルのみが利用可能である場合に、S[W’/8,-1]、S[3W’/8,-1]、S[5W’/8,-1]、S[7W’/8,-1];
●LM-Lモードが適用されるか、あるいは、左隣接サンプルのみが利用可能である場合に、S[-1,H’/8]、S[-1,3H’/8]、S[-1,5H’/8]、S[-1,7H’/8]
として選択される。
xA=(x0 A+x1 A+1)>>1;
xB=(x0 B+x1 B+1)>>1;
yA=(y0 A+y1 A+1)>>1;
yB=(y0 B+y1 B+1)>>1
として導出される。
8.4.4.2.8 INTRA_LT_CCLM、INTRA_L_CCLM及びINTRA_T_CCLMイントラ予測モードの仕様
このプロセスへの入力は:
- イントラ予測モードpredModeIntra、
- 現在ピクチャの左上サンプルに対する現在の変換ブロックの左上サンプルのサンプル位置(xTbC,yTbC)、
- 変換ブロックの幅を指定する変数nTbW、
- 変換ブロックの高さを指定する変数nTbH、
- x=-1,y=0..2*nTbH-1及びx=0..2*nTbW-1,y=-1であるクロマ隣接サンプルp[x][y]、である。
このプロセスの出力は、x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]である。
現在のルーマ位置(xTbY,yTbY)は、次のように導出される:
(xTbY,yTbY)=(xTbC<<(SubWidthC-1),yTbC<<(SubHeightC-1))
変数availL、availT及びavailTLは、次のように導出される:
- ブロックの左隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC)を入力として用いて呼び出され、出力はavailLに割り当てられる。
- ブロックの上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC,yTbC-1)を入力として用いて呼び出され、出力はavailTに割り当てられる。
- ブロックの左上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC-1)を入力として用いて呼び出され、出力はavailTLに割り当てられる。
- 利用可能な右上隣接クロマサンプルの数numTopRightは、次のように導出される:
- 変数numTopRightは0に等しくセットされ、availTRはTRUEに等しくセットされる。
- predModeIntraがINTRA_T_CCLMに等しいとき、x=nTbW..2*nTbW-1について、availTRがFALSEに等しくなるか又はxが2*nTbW-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC+x,yTbC-1)を入力として用いて呼び出され、出力はavailableTRに割り当てられる。
- availableTRがTRUEに等しいとき、numTopRightは1だけインクリメントされる。
- 利用可能な左下隣接クロマサンプルの数numLeftBelowは、次のように導出される:
- 変数numLeftBelowは0に等しくセットされ、availLBはTRUEに等しくセットされる。
- predModeIntraがINTRA_L_CCLMに等しいとき、y=nTbH..2*nTbH-1について、availLBがFALSEに等しくなるか又はyが2*nTbH-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC+y)を入力として用いて呼び出され、出力はavailableLBに割り当てられる。
- availableLBがTRUEに等しいとき、numLeftBelowは1だけインクリメントされる。
上及び右上にある利用可能な隣接クロマサンプルの数numTopSamp並びに左及び左下にある利用可能な隣接クロマサンプルの数nLeftSampは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しいとき、次が適用される:
numSampT=availT?nTbW:0
numSampL=availL?nTbH:0
- そうでない場合には、次が適用される:
numSampT=(availT&&predModeIntra==INTRA_T_CCLM)?(nTbW+Min(numTopRight,nTbH)):0
numSampL=(availL&&predModeIntra==INTRA_L_CCLM)?(nTbH+Min(numLeftBelow,nTbW)):0
変数bCTUboundaryは、次のように導出される:
bCTUboundary=(yTbC&(1<<(CtbLog2SizeY-1)-1)==0)?TRUE:FALSE
NがL及びTで置換される変数cntN及びアレイpickPosN[]は、次のように導出される:
- 変数numIs4Nは、((availT&&availL&&predModeIntra==INTRA LT CCLM)?0:1)に等しくセットされる。
- 変数startPosNは、numSampN>>(2+numIs4N)に等しくセットされる。
- 変数pickStepNは、Max(1,numSampN>>(1+numIs4N))に等しくセットされる。
- availNがTRUEに等しく、predModeIntraがINTRA_LT_CCLM又はINTRA_N_CCLMに等しい場合に、cntNは、Min(numSampN,(1+numIs4N)<<1)に等しくセットされ、pickPosN[pos]は、(startPosN+pos*pickStepN)に等しくセットされ、pos=0..(cntN-1)である。
- そうでない場合に、cntNは、0に等しくセットされる。
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]=1<<(BitDepthC-1)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDstY[x][y]=pY[x][y]
- そうでない場合に、フィルタ{F3,F5,F6}の組について、次が適用される:
F3[0]=1,F3[1]=2,F3[2]=1
- SubWidthC==2及びSubHeightC==2である場合
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,
F2[1]=1
- その他の場合
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,
F2[1]=0
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、F5にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[1][0]*pY[SubWidthC*x][SubHeightC*y-1]+
+F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]+
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、F5にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[1][0]*pY[0][SubHeightC*y-1]+
+F[0][1]*pY[-1][SubHeightC*y]+
+F[1][1]*pY[0][SubHeightC*y]+
+F[2][1]*pY[1][SubHeightC*y]+
+F[1][2]*pY[0][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、F3にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y-1]+
+F[1]*pY[0][SubHeightC*y]+
+F[2]*pY[0][SubHeightC*y+1]+
+2)>>2
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、F5にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]+
+F[0][1]*pY[SubWidthC*x-1][0]+
+F[1][1]*pY[SubWidthC*x][0]+
+F[2][1]*pY[SubWidthC*x+1][0]+
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、F3にセットされたFについて、次のように導出される:
pDsY[x][0]=
=(F[0]*pY[SubWidthC*x-1][0]+
+F[1]*pY[SubWidthC*x][0]+
+F[2]*pY[SubWidthC*x+1][0]+2)>>2
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F5にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[1][0]*pY[0][-1]+
+F[0][1]*pY[-1][0]+
+F[1][1]*pY[0][0]+
+F[2][1]*pY[1][0]+
+F[1][2]*pY[0][1]+4)>>3
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[-1][0]+
+F[1]*pY[0][0]+
+F[2]*pY[1][0]+
+2)>>2
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[0][-1]+
+F[1]*pY[0][0]+
+F[2]*pY[0][1]+
+2)>>2
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0]
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、F6にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+
+F[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]+
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+
+F[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、F6にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0][1]*pY[-1][SubHeightC*y]+
+F[0][2]*pY[-1][SubHeightC*y+1]+
+F[1][1]*pY[0][SubHeightC*y]+
+F[1][2]*pY[0][SubHeightC*y+1]+
+F[2][1]*pY[1][SubHeightC*y]+
+F[2][2]*pY[1][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、F2にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y]+
+F[1]*pY[0][SubHeightC*y+1]+1)>>1
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..(cntL-1)として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..(cntL-1)として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- pSelDsY[i]=pY[-1][y]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- y>0||availTL==TRUEである場合に、F5にセットされたFについて:
pSelDsY[idx]=
=F[1][0]*pY[-SubWidthC][SubHeightC*y-1]+
+F[0][1]*pY[-1-SubWidthC][SubHeightC*y]+
+F[1][1]*pY[-SubWidthC][SubHeightC*y]+
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]+
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3
- そうでない場合に、F3にセットされたFについて:
pSelDsY[idx]=
=(F[0]*pY[-1-SubWidthC][0]+
+F[1]*pY[-SubWidthC][0]+
+F[2]*pY[1-SubWidthC][0]+
+2)>>2
- 他の場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0][1]*pY[-1-SubWidthC][SubHeightC*y]+
+F[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+
+F[1][1]*pY[-SubWidthC][SubHeightC*y]+
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]+
+F[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..(cntL+cntT-1)として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=cntL..cntL+cntT-1として、次のように導出される:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- pSelDsY[idx]=pY[x][-1]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- x>0である場合:
- bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[1][0]*pY[SubWidthC*x][-1-SubHeightC]+
+F[0][1]*pY[SubWidthC*x-1][-SubHeightC]+
+F[1][1]*pY[SubWidthC*x][-SubHeightC]+
+F[2][1]*pY[SubWidthC*x+1][-SubHeightC]+
+F[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[SubWidthC*x-1][-1]+
+F[1]*pY[SubWidthC*x][-1]+
+F[2]*pY[SubWidthC*x+1][-1]+
+2)>>2
- 他の場合:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pSelDsY[idx]=
=F[1][0]*pY[-1][-1-SubHeightC]+
+F[0][1]*pY[-1][-SubHeightC]+
+F[1][1]*pY[0][-SubHeightC]+
+F[2][1]*pY[1][-SubHeightC]+
+F[1][2]pY[-1][1-SubHeightC]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[-1][-1]+
+F[1]*pY[0][-1]+
+F[2]*pY[1][-1]+
+2)>>2 (8-182)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[0][-1]+
+F[1]*pY[0][-2]+
+F[2]*pY[0][-1]+
+2)>>2
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1]
- 他の場合に、次が適用される:
- x>0である場合:
- bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0][1]*pY[SubWidthC*x-1][-2]+
+F[0][2]*pY[SubWidthC*x-1][-1]+
+F[1][1]*pY[SubWidthC*x][-2]+
+F[1][2]*pY[SubWidthC*x][-1]+
+F[2][1]*pY[SubWidthC*x+1][-2]+
+F[2][2]*pY[SubWidthC*x+1][-1]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[SubWidthC*y-1][-1]+
+F[1]*pY[SubWidthC*y][-1]+
+F[2][1]*pY[SubWidthC*y+1][-1]+
+2)>>2
- 他の場合:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0][1]*pY[-1][-2]+
+F[0][2]*pY[-1][-1]+
+F[1][1]*pY[0][-2]+
+F[1][2]*pY[0][-1]+
+F[2][1]*pY[1][-2]+
+F[2][2]*pY[1][-1]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[-1][-1]+
+F[1]*pY[0][-1]+
+F[2]*pY[1][-1]+
+2)>>2
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、F2にセットされたFについて、次が適用される:
pSelDsY[idx]=(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1]
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]をpSelComp[0]に等しくセットし、pSelComp[2]をpSelComp[1]に等しくセットし、pSelComp[0]をpSelComp[1]に等しくセットし、pSelComp[1]をpSelComp[3]に等しくセットし、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx[]及びmaxGrpIdx[]は、minGrpIdx[0]=0、minGrpIdx[1]=2、maxGrpIdx[0]=1、maxGrpIdx[1]=3とセットされる。
- pSelDsY[minGrpIdx[0]]>pSelDsY[minGrpIdx[1]]である場合に、Swap(minGrpIdx[0],minGrpIdx[1])。
- pSelDsY[maxGrpIdx[0]]>pSelDsY[maxGrpIdx[1]]である場合に、Swap(maxGrpIdx[0],maxGrpIdx[1])。
- pSelDsY[minGrpIdx[0]]>pSelDsY[maxGrpIdx[1]]である場合に、Swap(minGrpIdx,maxGrpIdx)。
- pSelDsY[minGrpIdx[1]]>pSelDsY[maxGrpIdx[0]]である場合に、Swap(minGrpIdx[1],maxGrpIdx[0])。
- maxY=(pSelDsY[maxGrpIdx[0]]+pSelDsY[maxGrpIdx[1]]+1)>>1。
- maxC=(pSelC[maxGrpIdx[0]]+pSelC[maxGrpIdx[1]]+1)>>1。
- minY=(pSelDsY[minGrpIdx[0]]+pSelDsY[minGrpIdx[1]]+1)>>1。
- minC=(pSelC[minGrpIdx[0]]+pSelC[minGrpIdx[1]]+1)>>1。
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0
a=0
b=1<<(BitDepthC-1)
- そうでない場合に、次が適用される:
diff=maxY-minY
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC
x=Floor(Log2(diff))
normDiff=((diff<<4)>>x)&15
x+=(normDiff!=0)?1:0
y=Floor(Log2(Abs(diffC)))+1
a=(diffC*(divSigTable[normDiff]|8)+2y-1)>>y
k=((3+x-y)<1)?1:3+x-y
a=((3+x-y)<1)?Sign(a)*15:a
b=minC-((a*minY)>>k)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0
a=0
b=minC
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1C(((pDsY[x][y]*a)>>k)+b)
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]=1<<(BitDepthC-1)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDstY[x][y]=pY[x][y]
- そうでない場合に、フィルタ{F3,F5,F6}の組について、次が適用される:
F3[0]=1,F3[1]=2,F3[2]=1
- SubWidthC==2及びSubHeightC==2である場合
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,
F2[1]=1
- その他の場合
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,
F2[1]=0
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、F5にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[1][0]*pY[SubWidthC*x][SubHeightC*y-1]+
+F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]+
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、F5にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[1][0]*pY[0][SubHeightC*y-1]+
+F[0][1]*pY[-1][SubHeightC*y]+
+F[1][1]*pY[0][SubHeightC*y]+
+F[2][1]*pY[1][SubHeightC*y]+
+F[1][2]*pY[0][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、F3にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y-1]+
+F[1]*pY[0][SubHeightC*y]+
+F[2]*pY[0][SubHeightC*y+1]+
+2)>>2
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、F5にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]+
+F[0][1]*pY[SubWidthC*x-1][0]+
+F[1][1]*pY[SubWidthC*x][0]+
+F[2][1]*pY[SubWidthC*x+1][0]+
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、F3にセットされたFについて、次のように導出される:
pDsY[x][0]=
=(F[0]*pY[SubWidthC*x-1][0]+
+F[1]*pY[SubWidthC*x][0]+
+F[2]*pY[SubWidthC*x+1][0]+2)>>2
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F5にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[1][0]*pY[0][-1]+
+F[0][1]*pY[-1][0]+
+F[1][1]*pY[0][0]+
+F[2][1]*pY[1][0]+
+F[1][2]*pY[0][1]+4)>>3
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[-1][0]+
+F[1]*pY[0][0]+
+F[2]*pY[1][0]+
+2)>>2
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[0][-1]+
+F[1]*pY[0][0]+
+F[2]*pY[0][1]+
+2)>>2
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0]
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、F6にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+
+F[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]+
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+
+F[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、F6にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0][1]*pY[-1][SubHeightC*y]+
+F[0][2]*pY[-1][SubHeightC*y+1]+
+F[1][1]*pY[0][SubHeightC*y]+
+F[1][2]*pY[0][SubHeightC*y+1]+
+F[2][1]*pY[1][SubHeightC*y]+
+F[2][2]*pY[1][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、F2にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y]+
+F[1]*pY[0][SubHeightC*y+1]+1)>>1
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..(cntL-1)として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..(cntL-1)として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- pSelDsY[i]=pY[-1][y]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- y>0||availTL==TRUEである場合に、F5にセットされたFについて:
pSelDsY[idx]=
=F[1][0]*pY[-SubWidthC][SubHeightC*y-1]+
+F[0][1]*pY[-1-SubWidthC][SubHeightC*y]+
+F[1][1]*pY[-SubWidthC][SubHeightC*y]+
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]+
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3
- そうでない場合に、F3にセットされたFについて:
pSelDsY[idx]=
(F[0]*pY[-1-SubWidthC][0]+
+F[1]*pY[-SubWidthC][0]+
+F[2]*pY[1-SubWidthC][0]+
+2)>>2
- 他の場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0][1]*pY[-1-SubWidthC][SubHeightC*y]+
+F[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+
+F[1][1]*pY[-SubWidthC][SubHeightC*y]+
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]+
+F[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..(cntL+cntT-1)として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=cntL..cntL+cntT-1として、次のように導出される:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- pSelDsY[idx]=pY[x][-1]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- x>0である場合:
- bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[1][0]*pY[SubWidthC*x][-1-SubHeightC]+
+F[0][1]*pY[SubWidthC*x-1][-SubHeightC]+
+F[1][1]*pY[SubWidthC*x][-SubHeightC]+
+F[2][1]*pY[SubWidthC*x+1][-SubHeightC]+
+F[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[SubWidthC*x-1][-1]+
+F[1]*pY[SubWidthC*x][-1]+
+F[2]*pY[SubWidthC*x+1][-1]+
+2)>>2
- 他の場合:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pSelDsY[idx]=
=F[1][0]*pY[-1][-1-SubHeightC]+
+F[0][1]*pY[-1][-SubHeightC]+
+F[1][1]*pY[0][-SubHeightC]+
+F[2][1]*pY[1][-SubHeightC]+
+F[1][2]pY[-1][1-SubHeightC]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[-1][-1]+
+F[1]*pY[0][-1]+
+F[2]*pY[1][-1]+
+2)>>2 (8-182)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[0][-1]+
+F[1]*pY[0][-2]+
+F[2]*pY[0][-1]+
+2)>>2
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1]
- 他の場合に、次が適用される:
- x>0である場合:
- bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0][1]*pY[SubWidthC*x-1][-1]+
+F[0][2]*pY[SubWidthC*x-1][-2]+
+F[1][1]*pY[SubWidthC*x][-1]+
+F[1][2]*pY[SubWidthC*x][-2]+
+F[2][1]*pY[SubWidthC*x+1][-1]+
+F[2][2]*pY[SubWidthC*x+1][-2]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[SubWidthC*y-1][-1]+
+F[1]*pY[SubWidthC*y][-1]+
+F[2][1]*pY[SubWidthC*y+1][-1]+
+2)>>2
- 他の場合:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0][1]*pY[-1][-1]+
+F[0][2]*pY[-1][-2]+
+F[1][1]*pY[0][-1]+
+F[1][2]*pY[0][-2]+
+F[2][1]*pY[1][-1]+
+F[2][2]*pY[1][-2]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
=(F[0]*pY[-1][-1]+
+F[1]*pY[0][-1]+
+F[2]*pY[1][-1]+
+2)>>2
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、F2にセットされたFについて、次が適用される:
pSelDsY[idx]=(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1]
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]をpSelComp[0]に等しくセットし、pSelComp[2]をpSelComp[1]に等しくセットし、pSelComp[0]をpSelComp[1]に等しくセットし、pSelComp[1]をpSelComp[3]に等しくセットし、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx[]及びmaxGrpIdx[]は、minGrpIdx[0]=0、minGrpIdx[1]=2、maxGrpIdx[0]=1、maxGrpIdx[1]=3とセットされる。
- pSelDsY[minGrpIdx[0]]>pSelDsY[minGrpIdx[1]]である場合に、Swap(minGrpIdx[0],minGrpIdx[1])。
- pSelDsY[maxGrpIdx[0]]>pSelDsY[maxGrpIdx[1]]である場合に、Swap(maxGrpIdx[0],maxGrpIdx[1])。
- pSelDsY[minGrpIdx[0]]>pSelDsY[maxGrpIdx[1]]である場合に、Swap(minGrpIdx,maxGrpIdx)。
- pSelDsY[minGrpIdx[1]]>pSelDsY[maxGrpIdx[0]]である場合に、Swap(minGrpIdx[1],maxGrpIdx[0])。
- maxY=(pSelDsY[maxGrpIdx[0]]+pSelDsY[maxGrpIdx[1]]+1)>>1。
- maxC=(pSelC[maxGrpIdx[0]]+pSelC[maxGrpIdx[1]]+1)>>1。
- minY=(pSelDsY[minGrpIdx[0]]+pSelDsY[minGrpIdx[1]]+1)>>1。
- minC=(pSelC[minGrpIdx[0]]+pSelC[minGrpIdx[1]]+1)>>1。
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0
a=0
b=1<<(BitDepthC-1)
- そうでない場合に、次が適用される:
diff=maxY-minY
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC
x=Floor(Log2(diff))
normDiff=((diff<<4)>>x)&15
x+=(normDiff!=0)?1:0
y=Floor(Log2(Abs(diffC)))+1
a=(diffC*(divSigTable[normDiff]|8)+2y-1)>>y
k=((3+x-y)<1)?1:3+x-y
a=((3+x-y)<1)?Sign(a)*15:a
b=minC-((a*minY)>>k)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0
a=0
b=minC
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1C(((pDsY[x][y]*a)>>k)+b)
このプロセスへの入力は:
- イントラ予測モードpredModeIntra、
- 現在ピクチャの左上サンプルに対する現在の変換ブロックの左上サンプルのサンプル位置(xTbC,yTbC)、
- 変換ブロックの幅を指定する変数nTbW、
- 変換ブロックの高さを指定する変数nTbH、
- x=-1,y=0..2*nTbH-1及びx=0..2*nTbW-1,y=-1であるクロマ隣接サンプルp[x][y]、である。
このプロセスの出力は、x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]である。
現在のルーマ位置(xTbY,yTbY)は、次のように導出される:
(xTbY,yTbY)=(xTbC<<(SubWidthC-1),yTbC<<(SubHeightC-1)) (346)
変数availL、availT及びavailTLは、次のように導出される:
- 第6.4.4節で規定されている、隣接ブロックの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)、隣接するクロマ位置(xTbC-1,yTbC)、FALSEに等しくセットされたcheckPredModeY、及びcIdxを入力として用いて呼び出され、出力はavailLに割り当てられる。
- 第6.4.4節で規定されている、隣接ブロックの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)m隣接するクロマ位置(xTbC,yTbC-1)、FALSEに等しくセットされたcheckPredModeY、及びcIdxを入力として用いて呼び出され、出力はavailTに割り当てられる。
- 変数availTLは、次のように導出される:
availTL=availL&&availT (347)
- 利用可能な右上隣接クロマサンプルの数numTopRightは、次のように導出される:
- 変数numTopRightは0に等しくセットされ、availTRはTRUEに等しくセットされる。
- predModeIntraがINTRA_T_CCLMに等しいとき、x=nTbW..2*nTbW-1について、availTRがFALSEに等しくなるか又はxが2*nTbW-1に等しくなるまで、次が適用される:
- 第6.4.4節で規定されている、隣接ブロックの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)、隣接するクロマ位置(xTbC+x,yTbC-1)、FALSEに等しくセットされたcheckPredModeY、及びcIdxを入力として用いて呼び出され、出力はavailableTRに割り当てられる。
- availableTRがTRUEに等しいとき、numTopRightは1だけインクリメントされる。
- 利用可能な左下隣接クロマサンプルの数numLeftBelowは、次のように導出される:
- 変数numLeftBelowは0に等しくセットされ、availLBはTRUEに等しくセットされる。
- predModeIntraがINTRA_L_CCLMに等しいとき、y=nTbH..2*nTbH-1について、availLBがFALSEに等しくなるか又はyが2*nTbH-1に等しくなるまで、次が適用される:
- 第6.4.4節で規定されている、隣接ブロックの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)、隣接するクロマ位置(xTbC-1,yTbC+y)、FALSEに等しくセットされたcheckPredModeY、及びcIdxを入力として用いて呼び出され、出力はavailLBに割り当てられる。
- availLBがTRUEに等しいとき、numLeftBelowは1だけインクリメントされる。
上及び右上にある利用可能な隣接クロマサンプルの数numSampT並びに左及び左下にある利用可能な隣接クロマサンプルの数numSampLは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しいとき、次が適用される:
numSampT=availT?nTbW:0 (348)
numSampL=availL?nTbH:0 (349)
- そうでない場合には、次が適用される:
numSampT=(availT&&predModeIntra==INTRA_T_CCLM)?(nTbW+Min(numTopRight,nTbH)):0
(350)
numSampL=(availL&&predModeIntra==INTRA_L_CCLM)?(nTbH+Min(numLeftBelow,nTbW)):0
(351)
変数bCTUboundaryは、次のように導出される:
bCTUboundary=(yTbC&(1<<(CtbLog2SizeY-1)-1)==0)?TRUE:FALSE (352)
NがL及びTで置換される変数cntN及びアレイpickPosNは、次のように導出される:
- 変数numIs4Nは、次のように導出される:
numIs4N=((availT&&availL&&predModeIntra==INTRA LT CCLM)?0:1) (353)
- 変数startPosNは、numSampN>>(2+numIs4N)に等しくセットされる。
変数pickStepNは、Max(1,numSampN>>(1+numIs4N))に等しくセットされる。
- availNがTRUEに等しく、predModeIntraがINTRA_LT_CCLM又はINTRA N CCLMに等しい場合に、次の割り当てが行われる:
- cntNは、Min(numSampN,(1+numIs4N)<<1)に等しくセットされる。
- pickPosN[pos]は、(startPosN+pos*pickStepN)に等しくセットされ、pos=0..(cntN-1)である。
- そうでない場合に、cntNは、0に等しくセットされる。
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]
=1<<(BitDepthC-1) (354)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDstY[x][y]=pY[x][y] (355)
- そうでない場合に、次が適用される:
- 1次元フィルタ係数アレイF1及びF2、並びに2次元フィルタ係数アレイF3及びF4は、次のとおりに定められる。
F1[0]=2,F1[1]=0 (356)
F2[0]=1,F2[1]=2,F2[2]=1 (357)
F3[i][j]=F4[i][j]=0,
ただし、i=0..2,j=0..2 (358)
- SubWidthC及びSubHeightCの両方が2に等しい場合に、次が適用される:
F1[0]=1,F1[1]=1 (359)
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1 (360)
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1
(361)
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
(362)
- その他の場合に、次が適用される:
F3[1][1]=8 (363)
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2
(364)
-sps_chroma_vertical_collocated_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F3[1][0]*pY[SubWidthC*x][SubHeightC*y-1]+F3[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F3[1][1]*pY[SubWidthC*x][SubHeightC*y]+F3[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F3[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3 (365)
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F3[1][0]*pY[0][SubHeightC*y-1]+
F3[0][1]*pY[-1][SubHeightC*y]+
F3[1][1]*pY[0][SubHeightC*y]+
F3[2][1]*pY[1][SubHeightC*y]+
F3[1][2]*pY[0][SubHeightC*y+1]
+4)>>3 (366)
- そうでない場合(availLがFALSEに等しい場合)には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F2[0]*pY[0][SubHeightC*y-1]+
F2[1]*pY[0][SubHeightC*y]+
F2[2]*pY[0][SubHeightC*y+1]
+2)>>2 (367)
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F3[1][0]*pY[SubWidthC*x][-1]+
F3[0][1]*pY[SubWidthC*x-1][0]+
F3[1][1]*pY[SubWidthC*x][0]+
F3[2][1]*pY[SubWidthC*x+1][0]+
F3[1][2]*pY[SubWidthC*x][1]
+4)>>3 (368)
- そうでない場合(availTがFALSEに等しい場合)には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F2[0]*pY[SubWidthC*x-1][0]+
F2[1]*pY[SubWidthC*x][0]+
F2[2]*pY[SubWidthC*x+1][0]
+2)>>2 (369)
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=
(F3[1][0]*pY[0][-1]+
F3[0][1]*pY[-1][0]+
F3[1][1]*pY[0][0]+
F3[2][1]*pY[1][0]+
F3[1][2]*pY[0][1]+4)>>3 (370)
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(F2[0]*pY[-1][0]
+F2[1]*pY[0][0]+F2[2]*pY[1][0]
+2)>>2 (371)
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(F2[0]*pY[0][-1]
+F2[1]*pY[0][0]+F2[2]*pY[0][1]
+2)>>2 (372)
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0] (373)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F4[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F4[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+F4[1][1]*pY[SubWidthC*x][SubHeightC*y]+F4[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+F4[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F4[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3 (374)
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F4[0][1]*pY[-1][SubHeightC*y]+
F4[0][2]*pY[-1][SubHeightC*y+1]+
F4[1][1]*pY[0][SubHeightC*y]+
F4[1][2]*pY[0][SubHeightC*y+1]+
F4[2][1]*pY[1][SubHeightC*y]+
F4[2][2]*pY[1][SubHeightC*y+1]
+4)>>3 (375)
- そうでない場合(availLがFALSEに等しい場合)には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(F1[0]*pY[0][SubHeightC*y]+
F1[1]*pY[0][SubHeightC*y+1]+1)
>>1 (376)
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..cntL-1として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..cntL-1として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[-1][y] (377)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- yが0よりも大きいか、又はavailTLがTRUEに等しい場合に、pSelDsY[idx]は、次のように導出される:
pSelDsY[idx]=(F3[1][0]*pY[-SubWidthC][SubHeightC*y-1]+F3[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F3[1][1]*pY[-SubWidthC][SubHeightC*y]+F3[2][1]*pY[1-SubWidthC][SubHeightC*y]+F3[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3 (378)
- そうでない場合(yが0に等しい場合)に、pSelDsY[idx]は、次のように導出される:
pSelDsY[idx]=
(F2[0]*pY[-1-SubWidthC][0]+
F2[1]*pY[-SubWidthC][0]+
F2[2]*pY[1-SubWidthC][0]
+2)>>2 (379)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F4[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+F4[1][1]*pY[-SubWidthC][SubHeightC*y]+F4[1][2]*pY[-SubWidthC][SubHeightC*y+1]+F4[2][1]*pY[1-SubWidthC][SubHeightC*y]+F4[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3 (380)
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..cntL+cntT-1として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=0..cntL+cntT-1として、次のように定められる:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[x][-1] (381)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- xが0よりも大きい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F3[1][0]*pY[SubWidthC*x][-1-SubHeightC]+F3[0][1]*pY[SubWidthC*x-1][-SubHeightC]+F3[1][1]*pY[SubWidthC*x][-SubHeightC]+F3[2][1]*pY[SubWidthC*x+1][-SubHeightC]+F3[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3 (382)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (383)
- 他の場合(xが0に等しい場合)に、次が適用される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=F3[1][0]*pY[-1][-1-SubHeightC]+F3[0][1]*pY[-1][-SubHeightC]+F3[1][1]*pY[0][-SubHeightC]+F3[2][1]*pY[1][-SubHeightC]+F3[1][2]*pY[-1][1-SubHeightC]+4)>>3 (384)
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、次が適用される:
pSelDsY[idx]=(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)
>>2 (385)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、次が適用される:
pSelDsY[idx]=(F2[0]*pY[0][-1]+
F2[1]*pY[0][-2]+F2[2]*pY[0][-1]+2)
>>2 (386)
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1] (387)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
- xが0よりも大きい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[SubWidthC*x-1][-1]+F4[0][2]*pY[SubWidthC*x-1][-2]+F4[1][1]*pY[SubWidthC*x][-1]+F4[1][2]*pY[SubWidthC*x][-2]+F4[2][1]*pY[SubWidthC*x+1][-1]+F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3 (388)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (389)
- 他の場合(xが0に等しい場合)に、次が適用される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1][-1]+F4[0][2]*pY[-1][-2]+F4[1][1]*pY[0][-1]+F4[1][2]*pY[0][-2]+F4[2][1]*pY[1][-1]+F4[2][2]*pY[1][-2]+4)>>3 (390)
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、次が適用される:
pSelDsY[idx]=(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)
>>2 (391)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F1[1]*pY[0][-2]+
F1[0]*pY[0][-1]+1)>>1 (392)
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1] (393)
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]はpSelComp[0]に等しくセットされ、pSelComp[2]はpSelComp[1]に等しくセットされ、pSelComp[0]はpSelComp[1]に等しくセットされ、pSelComp[1]はpSelComp[3]に等しくセットされ、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx及びmaxGrpIdxは、次のように導出がされる:
minGrpIdx[0]=0 (394)
minGrpIdx[1]=2 (395)
maxGrpIdx[0]=1 (396)
maxGrpIdx[1]=3 (397)
- pSelDsY[minGrpIdx[0]]がpSelDsY[minGrpIdx[1]]よりも大きいとき、minGrpIdx[0]及びminGrpIdx[1]は次のように交換される:
(minGrpIdx[0],minGrpIdx[1])
=Swap(minGrpIdx[0],minGrpIdx[1]) (398)
- pSelDsY[maxGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、maxGrpIdx[0]及びmaxGrpIdx[1]は次のように交換される:
(maxGrpIdx[0],maxGrpIdx[1])
=Swap(maxGrpIdx[0],maxGrpIdx[1]) (399)
- pSelDsY[minGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、アレイminGrpIdx及びmaxGrpIdxは次のように交換される:
(minGrpIdx,maxGrpIdx)
=Swap(minGrpIdx,maxGrpIdx) (400)
- pSelDsY[minGrpIdx[1]]がpSelDsY[maxGrpIdx[0]]よりも大きいとき、minGrpIdx[1]及びmaxGrpIdx[0]は次のように交換される:
(minGrpIdx[1],maxGrpIdx[0])
=Swap(minGrpIdx[1],maxGrpIdx[0]) (401)
-変数minY、maxY、minC及びmaxCは、次のように導出される:
maxY=(pSelDsY[maxGrpIdx[0]]
+pSelDsY[maxGrpIdx[1]]+1)>>1 (402)
maxC=(pSelC[maxGrpIdx[0]]
+pSelC[maxGrpIdx[1]]+1)>>1 (403)
minY=(pSelDsY[minGrpIdx[0]]
+pSelDsY[minGrpIdx[1]]+1)>>1 (404)
minC=(pSelC[minGrpIdx[0]]
+pSelC[minGrpIdx[1]]+1)>>1 (405)
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0 (406)
a=0 (407)
b=1<<(BitDepthC-1) (408)
- そうでない場合に、次が適用される:
diff=maxY-minY (409)
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC (410)
x=Floor(Log2(diff)) (411)
normDiff=((diff<<4)>>x)&15 (412)
x+=(normDiff!=0)?1:0 (413)
y=Floor(Log2(Abs(diffC)))+1 (414)
a=(diffC*(divSigTable[normDiff]|8)
+2y-1)>>y (415)
k=((3+x-y)<1)?1:3+x-y (416)
a=((3+x-y)<1)?Sign(a)*15:a (417)
b=minC-((a*minY)>>k) (418)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
(419)
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0 (420)
a=0 (421)
b=minC (422)
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1(((pDsY[x][y]*a)>>k)+b) (423)
注記-このプロセスは、sps_chroma_vertical_collocated_flagを使用する。しかし、実施を簡単にするために、それはsps_chroma_horizontal_collocated_flagを使用しない。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDstY[x][y]=pY[x][y] (355)
- そうでない場合に、次が適用される:
- 1次元フィルタ係数アレイF1及びF2、並びに2次元フィルタ係数アレイF3及びF4は、次のとおりに定められる。
F1[0]=4,F1[1]=0 (356)
F2[0]=1,F2[1]=2,F2[2]=1 (357)
F3[i][j]=F4[i][j]=0,
ただし、i=0..2,j=0..2 (358)
- SubWidthC及びSubHeightCの両方が2に等しい場合に、次が適用される:
F1[0]=3,F1[1]=1 (359)
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1 (360)
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1
(361)
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
(362)
- その他の場合に、次が適用される:
F3[1][1]=8 (363)
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2
(364)
-sps_chroma_vertical_collocated_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F3[1][0]*pY[SubWidthC*x][SubHeightC*y-1]+F3[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F3[1][1]*pY[SubWidthC*x][SubHeightC*y]+F3[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F3[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3 (365)
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F3[1][0]*pY[0][SubHeightC*y-1]+
F3[0][1]*pY[-1][SubHeightC*y]+
F3[1][1]*pY[0][SubHeightC*y]+
F3[2][1]*pY[1][SubHeightC*y]+
F3[1][2]*pY[0][SubHeightC*y+1]
+4)>>3 (366)
- そうでない場合(availLがFALSEに等しい場合)には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F2[0]*pY[0][SubHeightC*y-1]+
F2[1]*pY[0][SubHeightC*y]+
F2[2]*pY[0][SubHeightC*y+1]
+2)>>2 (367)
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F3[1][0]*pY[SubWidthC*x][-1]+
F3[0][1]*pY[SubWidthC*x-1][0]+
F3[1][1]*pY[SubWidthC*x][0]+
F3[2][1]*pY[SubWidthC*x+1][0]+
F3[1][2]*pY[SubWidthC*x][1]
+4)>>3 (368)
- そうでない場合(availTがFALSEに等しい場合)には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F2[0]*pY[SubWidthC*x-1][0]+
F2[1]*pY[SubWidthC*x][0]+
F2[2]*pY[SubWidthC*x+1][0]
+2)>>2 (369)
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=
(F3[1][0]*pY[0][-1]+
F3[0][1]*pY[-1][0]+
F3[1][1]*pY[0][0]+
F3[2][1]*pY[1][0]+
F3[1][2]*pY[0][1]+4)>>3 (370)
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(F2[0]*pY[-1][0]
+F2[1]*pY[0][0]+F2[2]*pY[1][0]
+2)>>2 (371)
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(F2[0]*pY[0][-1]
+F2[1]*pY[0][0]+F2[2]*pY[0][1]
+2)>>2 (372)
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0] (373)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F4[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F4[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+F4[1][1]*pY[SubWidthC*x][SubHeightC*y]+F4[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+F4[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F4[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3 (374)
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F4[0][1]*pY[-1][SubHeightC*y]+
F4[0][2]*pY[-1][SubHeightC*y+1]+
F4[1][1]*pY[0][SubHeightC*y]+
F4[1][2]*pY[0][SubHeightC*y+1]+
F4[2][1]*pY[1][SubHeightC*y]+
F4[2][2]*pY[1][SubHeightC*y+1]
+4)>>3 (375)
- そうでない場合(availLがFALSEに等しい場合)には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(F1[0]*pY[0][SubHeightC*y]+
F1[1]*pY[0][SubHeightC*y+1]+2)
>>2 (376)
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..cntL-1として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..cntL-1として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[-1][y] (377)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- yが0よりも大きいか、又はavailTLがTRUEに等しい場合に、pSelDsY[idx]は、次のように導出される:
pSelDsY[idx]=(F3[1][0]*pY[-SubWidthC][SubHeightC*y-1]+F3[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F3[1][1]*pY[-SubWidthC][SubHeightC*y]+F3[2][1]*pY[1-SubWidthC][SubHeightC*y]+F3[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3 (378)
- そうでない場合(yが0に等しい場合)に、pSelDsY[idx]は、次のように導出される:
pSelDsY[idx]=
(F2[0]*pY[-1-SubWidthC][0]+
F2[1]*pY[-SubWidthC][0]+
F2[2]*pY[1-SubWidthC][0]
+2)>>2 (379)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F4[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+F4[1][1]*pY[-SubWidthC][SubHeightC*y]+F4[1][2]*pY[-SubWidthC][SubHeightC*y+1]+F4[2][1]*pY[1-SubWidthC][SubHeightC*y]+F4[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3 (380)
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..cntL+cntT-1として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=0..cntL+cntT-1として、次のように定められる:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[x][-1] (381)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- xが0よりも大きい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F3[1][0]*pY[SubWidthC*x][-1-SubHeightC]+F3[0][1]*pY[SubWidthC*x-1][-SubHeightC]+F3[1][1]*pY[SubWidthC*x][-SubHeightC]+F3[2][1]*pY[SubWidthC*x+1][-SubHeightC]+F3[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3 (382)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (383)
- 他の場合(xが0に等しい場合)に、次が適用される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=F3[1][0]*pY[-1][-1-SubHeightC]+F3[0][1]*pY[-1][-SubHeightC]+F3[1][1]*pY[0][-SubHeightC]+F3[2][1]*pY[1][-SubHeightC]+F3[1][2]pY[-1][1-SubHeightC]+4)>>3 (384)
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、次が適用される:
pSelDsY[idx]=(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)
>>2 (385)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、次が適用される:
pSelDsY[idx]=(F2[0]*pY[0][-1]+
F2[1]*pY[0][-2]+F2[2]*pY[0][-1]+2)
>>2 (386)
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1] (387)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
- xが0よりも大きい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[SubWidthC*x-1][-1]+F4[0][2]*pY[SubWidthC*x-1][-2]+F4[1][1]*pY[SubWidthC*x][-1]+F4[1][2]*pY[SubWidthC*x][-2]+F4[2][1]*pY[SubWidthC*x+1][-1]+F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3 (388)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (389)
- 他の場合(xが0に等しい場合)に、次が適用される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1][-1]+F4[0][2]*pY[-1][-2]+F4[1][1]*pY[0][-1]+F4[1][2]*pY[0][-2]+F4[2][1]*pY[1][-1]+F4[2][2]*pY[1][-2]+4)>>3 (390)
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、次が適用される:
pSelDsY[idx]=(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)
>>2 (391)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F1[1]*pY[0][-2]+
F1[0]*pY[0][-1]+2)>>2 (392)
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1] (393)
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]はpSelComp[0]に等しくセットされ、pSelComp[2]はpSelComp[1]に等しくセットされ、pSelComp[0]はpSelComp[1]に等しくセットされ、pSelComp[1]はpSelComp[3]に等しくセットされ、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx及びmaxGrpIdxは、次のように導出がされる:
minGrpIdx[0]=0 (394)
minGrpIdx[1]=2 (395)
maxGrpIdx[0]=1 (396)
maxGrpIdx[1]=3 (397)
- pSelDsY[minGrpIdx[0]]がpSelDsY[minGrpIdx[1]]よりも大きいとき、minGrpIdx[0]及びminGrpIdx[1]は次のように交換される:
(minGrpIdx[0],minGrpIdx[1])
=Swap(minGrpIdx[0],minGrpIdx[1]) (398)
- pSelDsY[maxGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、maxGrpIdx[0]及びmaxGrpIdx[1]は次のように交換される:
(maxGrpIdx[0],maxGrpIdx[1])
=Swap(maxGrpIdx[0],maxGrpIdx[1]) (399)
- pSelDsY[minGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、アレイminGrpIdx及びmaxGrpIdxは次のように交換される:
(minGrpIdx,maxGrpIdx)
=Swap(minGrpIdx,maxGrpIdx) (400)
- pSelDsY[minGrpIdx[1]]がpSelDsY[maxGrpIdx[0]]よりも大きいとき、minGrpIdx[1]及びmaxGrpIdx[0]は次のように交換される:
(minGrpIdx[1],maxGrpIdx[0])
=Swap(minGrpIdx[1],maxGrpIdx[0]) (401)
-変数minY、maxY、minC及びmaxCは、次のように導出される:
maxY=(pSelDsY[maxGrpIdx[0]]
+pSelDsY[maxGrpIdx[1]]+1)>>1 (402)
maxC=(pSelC[maxGrpIdx[0]]
+pSelC[maxGrpIdx[1]]+1)>>1 (403)
minY=(pSelDsY[minGrpIdx[0]]
+pSelDsY[minGrpIdx[1]]+1)>>1 (404)
minC=(pSelC[minGrpIdx[0]]
+pSelC[minGrpIdx[1]]+1)>>1 (405)
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0 (406)
a=0 (407)
b=1<<(BitDepthC-1) (408)
- そうでない場合に、次が適用される:
diff=maxY-minY (409)
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC (410)
x=Floor(Log2(diff)) (411)
normDiff=((diff<<4)>>x)&15 (412)
x+=(normDiff!=0)?1:0 (413)
y=Floor(Log2(Abs(diffC)))+1 (414)
a=(diffC*(divSigTable[normDiff]|8)
+2y-1)>>y (415)
k=((3+x-y)<1)?1:3+x-y (416)
a=((3+x-y)<1)?Sign(a)*15:a (417)
b=minC-((a*minY)>>k) (418)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
(419)
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0 (420)
a=0 (421)
b=minC (422)
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1(((pDsY[x][y]*a)>>k)+b) (423)
注記-このプロセスは、sps_chroma_vertical_collocated_flagを使用する。しかし、実施を簡単にするために、それはsps_chroma_horizontal_collocated_flagを使用しない。
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTがFALSEに等しいとき、x=-1..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、ルーマサンプルpY[x][0]に等しくセットされる。
- availLがFALSEに等しいとき、x=-1,-2,-3,y=-1..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、ルーマサンプルpY[0][y]に等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDstY[x][y]=pY[x][y] (355)
- そうでない場合に、次が適用される:
- 1次元フィルタ係数アレイF1及びF2、並びに2次元フィルタ係数アレイF3及びF4は、次のとおりに定められる:
F2[0]=1,F2[1]=2,F2[2]=1 (357)
F3[i][j]=F4[i][j]=0,
ただし、i=0..2,j=0..2 (358)
- SubWidthC及びSubHeightCの両方が2に等しい場合に、次が適用される:
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1 (360)
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1
(361)
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
(362)
- その他の場合に、次が適用される:
F3[1][1]=8 (363)
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2
(364)
- sps_chroma_vertical_collocated_flagが1に等しい場合には、次が適用される:
- x=0..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=
(F3[1][0]*pY[SubWidthC*x][SubHeightC*y-1]
+F3[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F3[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F3[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F3[1][2]*pY[SubWidthC*x][SubHeightC*y+1]
+4)>>3 (365)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)には、次が適用される:
- x=0..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F4[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F4[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+F4[1][1]*pY[SubWidthC*x][SubHeightC*y]+F4[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+F4[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F4[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3 (374)
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..cntL-1として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..cntL-1として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[-1][y] (377)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
pSelDsY[idx]=
(F3[1][0]*pY[-SubWidthC][SubHeightC*y-1]
+F3[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F3[1][1]*pY[-SubWidthC][SubHeightC*y]
+F3[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F3[1][2]*pY[-SubWidthC][SubHeightC*y+1]
+4)>>3 (378)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F4[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+F4[1][1]*pY[-SubWidthC][SubHeightC*y]+F4[1][2]*pY[-SubWidthC][SubHeightC*y+1]+F4[2][1]*pY[1-SubWidthC][SubHeightC*y]+F4[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3 (380)
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..cntL+cntT-1として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=0..cntL+cntT-1として、次のように定められる:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[x][-1] (381)
- そうでない場合に、次が適用される:
-sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=
(F3[1][0]*pY[SubWidthC*x][-1-SubHeightC]
+F3[0][1]*pY[SubWidthC*x-1][-SubHeightC]
+F3[1][1]*pY[SubWidthC*x][-SubHeightC]
+F3[2][1]*pY[SubWidthC*x+1][-SubHeightC]
+F3[1][2]*pY[SubWidthC*x][1-SubHeightC]
+4)>>3 (382)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (383)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[SubWidthC*x-1][-1]+F4[0][2]*pY[SubWidthC*x-1][-2]+F4[1][1]*pY[SubWidthC*x][-1]+F4[1][2]*pY[SubWidthC*x][-2]+F4[2][1]*pY[SubWidthC*x+1][-1]+F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3 (388)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (389)
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]はpSelComp[0]に等しくセットされ、pSelComp[2]はpSelComp[1]に等しくセットされ、pSelComp[0]はpSelComp[1]に等しくセットされ、pSelComp[1]はpSelComp[3]に等しくセットされ、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx及びmaxGrpIdxは、次のように導出がされる:
minGrpIdx[0]=0 (394)
minGrpIdx[1]=2 (395)
maxGrpIdx[0]=1 (396)
maxGrpIdx[1]=3 (397)
- pSelDsY[minGrpIdx[0]]がpSelDsY[minGrpIdx[1]]よりも大きいとき、minGrpIdx[0]及びminGrpIdx[1]は次のように交換される:
(minGrpIdx[0],minGrpIdx[1])
=Swap(minGrpIdx[0],minGrpIdx[1]) (398)
- pSelDsY[maxGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、maxGrpIdx[0]及びmaxGrpIdx[1]は次のように交換される:
(maxGrpIdx[0],maxGrpIdx[1])
=Swap(maxGrpIdx[0],maxGrpIdx[1]) (399)
- pSelDsY[minGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、アレイminGrpIdx及びmaxGrpIdxは次のように交換される:
(minGrpIdx,maxGrpIdx)
=Swap(minGrpIdx,maxGrpIdx) (400)
- pSelDsY[minGrpIdx[1]]がpSelDsY[maxGrpIdx[0]]よりも大きいとき、minGrpIdx[1]及びmaxGrpIdx[0]は次のように交換される:
(minGrpIdx[1],maxGrpIdx[0])
=Swap(minGrpIdx[1],maxGrpIdx[0]) (401)
- 変数minY、maxY、minC及びmaxCは、次のように導出される:
maxY=(pSelDsY[maxGrpIdx[0]]
+pSelDsY[maxGrpIdx[1]]+1)>>1 (402)
maxC=(pSelC[maxGrpIdx[0]]
+pSelC[maxGrpIdx[1]]+1)>>1 (403)
minY=(pSelDsY[minGrpIdx[0]]
+pSelDsY[minGrpIdx[1]]+1)>>1 (404)
minC=(pSelC[minGrpIdx[0]]
+pSelC[minGrpIdx[1]]+1)>>1 (405)
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0 (406)
a=0 (407)
b=1<<(BitDepthC-1) (408)
- そうでない場合に、次が適用される:
diff=maxY-minY (409)
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC (410)
x=Floor(Log2(diff)) (411)
normDiff=((diff<<4)>>x)&15 (412)
x+=(normDiff!=0)?1:0 (413)
y=Floor(Log2(Abs(diffC)))+1 (414)
a=(diffC*(divSigTable[normDiff]|8)
+2y-1)>>y (415)
k=((3+x-y)<1)?1:3+x-y (416)
a=((3+x-y)<1)?Sign(a)*15:a (417)
b=minC-((a*minY)>>k) (418)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
(419)
- そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0 (420)
a=0 (421)
b=minC (422)
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1(((pDsY[x][y]*a)>>k)+b) (423)
注記-このプロセスは、sps_chroma_vertical_collocated_flagを使用する。しかし、実施を簡単にするために、それはsps_chroma_horizontal_collocated_flagを使用しない。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pDstY[x][y]=pY[x][y]
- そうでない場合に、次が適用される:
- 1次元フィルタ係数アレイF2は、次のとおりに定められる:
F2[0]=1,F2[1]=2,F2[2]=1
- さもなければ、2次元フィルタ係数アレイF3及びF4は、次のとおりに定められる。
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
- sps_chroma_vertical_collocated_flagが1に等しい場合には、次が適用される:
pDsY[x][y]=
(F3[1][0]*pY[SubWidthC*x][SubHeightC*y-1]
+F3[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F3[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F3[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F3[1][2]*pY[SubWidthC*x][SubHeightC*y+1]
+4)>>3
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)には、次が適用される:
pDsY[x][y]=(F4[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F4[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+F4[1][1]*pY[SubWidthC*x][SubHeightC*y]+F4[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+F4[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F4[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[-1][y]
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
pSelDsY[idx]=
(F3[1][0]*pY[-SubWidthC][SubHeightC*y-1]
+F3[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F3[1][1]*pY[-SubWidthC][SubHeightC*y]
+F3[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F3[1][2]*pY[-SubWidthC][SubHeightC*y+1]
+4)>>3
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F4[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+F4[1][1]*pY[-SubWidthC][SubHeightC*y]+F4[1][2]*pY[-SubWidthC][SubHeightC*y+1]+F4[2][1]*pY[1-SubWidthC][SubHeightC*y]+F4[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[x][-1]
- そうでない場合に、次が適用される:
-sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=
(F3[1][0]*pY[SubWidthC*x][-1-SubHeightC]
+F3[0][1]*pY[SubWidthC*x-1][-SubHeightC]
+F3[1][1]*pY[SubWidthC*x][-SubHeightC]
+F3[2][1]*pY[SubWidthC*x+1][-SubHeightC]
+F3[1][2]*pY[SubWidthC*x][1-SubHeightC]
+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]+2)>>2
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=
(F4[0][1]*pY[SubWidthC*x-1][-1]+
F4[0][2]*pY[SubWidthC*x-1][-2]+
F4[1][1]*pY[SubWidthC*x][-1]+
F4[1][2]*pY[SubWidthC*x][-2]+
F4[2][1]*pY[SubWidthC*x+1][-1]+
F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]+2)>>2
- ビットストリームから第1シンタックス要素をパースするよう構成されるパーシングユニット1501。上述されたように、例えば、第1シンタックス要素は、SPSパラメータに含まれるsps_cclm_colocated_chroma_flagである。
実施形態1.線形モデルを使用するイントラ予測の方法であって、
現在ブロックが属するピクチャのクロマフォーマットに基づき、前記現在ブロックのルーマ成分に対するフィルタを決定することと、
前記現在ブロックの前記ルーマ成分の再構成されたルーマサンプルと、前記現在ブロックの前記ルーマ成分に隣接する選択された位置(現在ブロックの左又は上側に隣接する1つ又は複数の行/列)にあるルーマサンプルとのエリアに、前記決定されたフィルタを適用して、フィルタ処理された再構成されたルーマサンプル(例えば、現在ブロック内のフィルタ処理された再構成されたルーマサンプル(例えば、現在ブロックのルーマ成分))を取得することと、
線形モデル導出の入力として、前記フィルタ処理された再構成されたルーマサンプルに基づいて(例えば、ルーマサンプルの組は、現在ブロック内のフィルタ処理された再構成されたルーマサンプルと、現在ブロックの外にあるフィルタ処理された隣接ルーマサンプルとを含み、例えば、決定されたフィルタは、現在ブロックの外にある隣接ルーマサンプルにも適用されてよい)、線形モデル係数を取得することと、
取得された線形モデル係数と、前記現在ブロックの前記フィルタ処理された再構成されたルーマサンプル(例えば、現在ブロック内のフィルタ処理された再構成されたルーマサンプル(例えば、現在ブロックのルーマ成分))とに基づいて、交差成分予測を実行して、現在クロマブロックの予測子を取得することと
を有する方法。
前記フィルタを、前記現在ブロック内のルーマサンプルの位置及び前記クロマフォーマットに基づき決定すること、又は
前記現在ブロックに属する複数のルーマサンプルに対する各々のフィルタを、前記現在ブロック内のルーマサンプルの各々の位置及び前記クロマフォーマットに基づき決定すること
を有する、方法。
次の:
サブサンプリング比情報(例えば、現在ブロックが属するピクチャのクロマフォーマットに従ってテーブルから取得され得るSubWidthC及びSubHeightC)、
前記現在ブロックが属するピクチャのクロマフォーマット(例えば、クロマフォーマットは、サブサンプリング比情報(例えば、SubWidthC及びSubHeightC)を取得するために使用される)、
前記現在ブロック内のルーマサンプルの位置、
前記現在ブロックに属するルーマサンプルの数、
前記現在ブロックの幅及び高さ、及び/又は
前記現在ブロック内のルーマサンプルに対するサブサンプリングされたクロマサンプルの位置
のうちの1つ以上に基づき前記フィルタを決定することを有する、方法。
前記サブサンプリングされたクロマサンプルが対応するルーマサンプルと同一位置にある場合に、複数のフィルタとサブサンプリング比情報(例えば、SubWidthC及びSubHeightC、すなわち、例えば、現在ブロックの幅及び高さの値)との間の予め設定された第2又は第3の予め設定された関係(例えば、表2又は表3のどちらか)が、前記フィルタの決定に使用される、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F3,F5,F6}の組について、次が適用される:
F3[0]=1,F3[1]=2,F3[2]=1
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,F2[1]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,F2[1]=0
である、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F1,F2,F3}の組について、次が適用される:
F1[0]=2,F1[1]=0
F2[0]=1,F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F1[0]=1,F1[1]=1,
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F1,F2,F3}の組について、次が適用される:
F1[0]=4,F1[1]=0
F2[0]=1、F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F1[0]=3,F1[1]=1,
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、
F2[0]=1、F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
(外2)
、係数「4」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する)。
フィルタ処理された再構成されたルーマサンプル(例えば、Rec’L[x,y])からサブサンプリングされる境界ルーマ再構成サンプルを有する、方法。
predc(i,j)=α・recL’(i,j)+β
に基づき取得され、predc(i,j)は、クロマサンプルを表し、recL(i,j)は、対応する再構成されたルーマサンプル(例えば、対応する再構成されたルーマサンプルの位置は現在ブロックの中にある)を表す、方法。
線形モデル(例えば、交差成分線形モデル,CCLM、又は多方向線形モデル,MDLM)を用いてイントラ予測を実行することと、
複数のシンタックス要素を含むビットストリームを生成することと
を有し、
前記複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素を含む(例えば、CCLMのルーマフィルタの選択、特に、sps_cclm_colocated_chroma_flagのようなSPSフラグ)、方法。
前記シンタックス要素の値が0又はFALSEであるとき、前記フィルタは、前記線形モデルの決定及び前記予測のためにルーマサンプルに適用される、方法。
ビットストリームから複数のシンタックス要素をパースすることであり、前記複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素を含む(例えば、CCLMのルーマフィルタの選択、特に、sps_cclm_colocated_chroma_flagのようなSPSフラグ)、ことと、
指示された線形モデル(例えば、CCLM)を用いてイントラ予測を実行することと
を有する方法。
前記シンタックス要素の値が1又はTRUEであるとき、前記フィルタは、前記線形モデルの決定及び前記予測のためにルーマサンプルに適用されない、方法。
クロマフォーマット情報に基づきダウンサンプリングフィルタの組を決定することであり、前記クロマフォーマット情報は、現在ブロックが属するピクチャのクロマフォーマットを示す、ことと、
前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを、前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって取得することと、
前記選択された隣接ルーマサンプルの前記ダウンサンプリングされたルーマ参照サンプルと、前記ダウンサンプリングされたルーマ参照サンプルに対応するクロマ参照サンプルとに基づき、1つ以上の線形モデル係数を決定することと、
前記線形モデル係数と、全ルーマブロック内の前記再構成されたルーマサンプルの前記ダウンサンプリングされたルーマサンプルとに基づき、前記ルーマブロックに対応するクロマブロックの予測サンプルを取得することと
を有する方法。
前記クロマフォーマット情報に基づきサブサンプリング比情報(例えば、SubWidthC及びSubHeightC)を決定することと、
前記サブサンプリング比情報(例えば、SubWidthC及びSubHeightC)に基づき前記ダウンサンプリングフィルタの組を決定することと
を有する、方法。
前記クロマフォーマットが4:2:0カラーフォーマットである場合に、前記現在ブロックのルーマブロックに使用される第1のダウンサンプリングフィルタの組を決定すること、
前記クロマフォーマットが4:2:2カラーフォーマットである場合に、前記現在ブロックのルーマブロックに使用される第2のダウンサンプリングフィルタの組を決定すること、又は
前記クロマフォーマットが4:4:4カラーフォーマットである場合に、前記現在ブロックのルーマブロックに使用される第3のダウンサンプリングフィルタの組を決定すること
うちの1つ以上を有する、方法。
SubWidthC==2及びSubHeightC==2である場合に、前記現在ブロックのルーマブロックに使用される第1のダウンサンプリングフィルタの組(ダウンサンプリングフィルタ係数の組)を決定すること、
SubWidthC==2及びSubHeightC==1である場合に、前記現在ブロックのルーマブロックに使用される第2のダウンサンプリングフィルタの組(ダウンサンプリングフィルタ係数の組)を決定すること、又は
SubWidthC==1及びSubHeightC==1である場合に、前記現在ブロックのルーマブロックに使用される第3のダウンサンプリングフィルタの組(ダウンサンプリングフィルタ係数の組)を決定すること
のうちの1つ以上を有する、方法。
前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを、前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって取得することは、
再構成されたルーマサンプルの空間エリアに第1ダウンサンプリングフィルタを適用することによって、前記ルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを取得することであり、前記再構成されたルーマサンプルの空間エリアは、前記再構成されたルーマサンプル(ダウンサンプリングされたルーマサンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む、ことと、
再構成されたルーマサンプルの空間エリアに前記第1ダウンサンプリングフィルタを適用することによって、選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルを取得することであり、前記再構成されたルーマサンプルの空間エリアは、前記選択された隣接ルーマサンプル(前記ダウンサンプリングされたルーマ参照サンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む、ことと
を有し、
前記第1ダウンサンプリングフィルタは、前記ダウンサンプリングフィルタの組の中にある、方法。
4:2:0カラーフォーマットが使用される(SubWidthC==2及びSubHeightC==2)場合に、前記第1ダウンサンプリングフィルタは2D非分離可能フィルタである、方法。
(外3)
によって表され、非ゼロ係数が、前記フィルタ処理された再構成されたルーマサンプルの位置に水平方向に隣接する位置にあり、係数「2」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する)、方法。
(外4)
によって表され、非ゼロ係数が、前記フィルタ処理された再構成されたルーマサンプルの位置に水平方向及び/又は垂直方向に隣接する位置にあり、係数「4」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する)、方法。
前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを、前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって取得することは、
再構成されたルーマサンプルの空間エリアに第2ダウンサンプリングフィルタを適用することによって、前記ルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを取得することであり、前記再構成されたルーマサンプルの空間エリアは、前記再構成されたルーマサンプル(ダウンサンプリングされたルーマサンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む、ことと、
再構成されたルーマサンプルの空間エリアに前記第2ダウンサンプリングフィルタを適用することによって、選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルを取得することであり、前記再構成されたルーマサンプルの空間エリアは、前記選択された隣接ルーマサンプル(前記ダウンサンプリングされたルーマ参照サンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む、ことと
を有し、
前記第2ダウンサンプリングフィルタは、前記ダウンサンプリングフィルタの組の中にある、方法。
4:2:0カラーフォーマットが使用される(SubWidthC==2及びSubHeightC==2)場合に、前記第2ダウンサンプリングフィルタは2D非分離可能フィルタである、方法。
(外5)
によって表され、非ゼロ係数が、前記フィルタ処理された再構成されたルーマサンプルの位置に水平方向に隣接する位置にあり、係数「2」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する)、方法。
(外6)
によって表され、非ゼロ係数が、前記フィルタ処理された再構成されたルーマサンプルの位置に水平方向及び/又は垂直方向に隣接する位置にあり、係数「2」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する)、方法。
クロマサンプルタイプ2、又は
クロマサンプルタイプ4
のうちのいずれか1つによって表される、方法。
クロマサンプルタイプ0、
クロマサンプルタイプ1、
クロマサンプルタイプ3、又は
クロマサンプルタイプ5
のうちのいずれか1つによって表される、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F3,F5,F6}の組について、次が適用される:
F3[0]=1,F3[1]=2,F3[2]=1
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,F2[1]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,F2[1]=0
である、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F1,F2,F3}の組について、次が適用される:
F1[0]=2又は4,F1[1]=0
F2[0]=1,F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F1[0]=1又は3,F1[1]=1,
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
pSelDsY[idx]=
=(F[0]*pY[-1][-1]+
+F[1]*pY[0][-1]+
+F[2]*pY[1][-1]+
+2)>>2
方法。
pSelDsY[idx]=
=(F[0][1]*pY[-1][-1]+
+F[0][2]*pY[-1][-2]+
+F[1][1]*pY[0][-1]+
+F[1][2]*pY[0][-2]+
+F[2][1]*pY[1][-1]+
+F[2][2]*pY[1][-2]+4)>>3
方法。
pSelDsY[idx]=pY[0][-1]
方法。
pSelDsY[idx]=
(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
方法。
pSelDsY[idx]=
(F4[0][1]*pY[SubWidthC x-1][-1]+
F4[0][2]*pY[SubWidthC*x-1][-2]+
F4[1][1]*pY[SubWidthC*x][-1]+
F4[1][2]*pY[SubWidthC*x][-2]+
F4[2][1]*pY[SubWidthC*x+1][-1]+
F4[2][2]*pY[SubWidthC*x+1][-2]+4>>3
方法。
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]+2>>2
方法。
少なくとも第1条件が満足されない(例えば、bCTUboundaryがFALSEに等しい)場合に、次が適用される:
pSelDsY[idx]=
(F4[0][1]*pY[-1][-1]+
F4[0][2]*pY[-1][-2]+
F4[1][1]*pY[0][-1]+
F4[1][2]*pY[0][-2]+
F4[2][1]*pY[1][-1]+
F4[2][2]*pY[1][-2]+4>>3
方法。
pSelDsY[idx]=
(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+
F2[2]*pY[1][-1]+2>>2
方法。
pSelDsY[idx]=
(F1[1]*pY[0][-2]+F1[0]*pY[0][-1]+1)>>1
又は
pSelDsY[idx]=
(F1[1]*pY[0][-2]+F1[0]*pY[0][-1]+2)>>2
方法。
pSelDsY[idx]=pY[0][-1]
方法。
pDsY[0][y]=
(F1[0]*pY[0][SubHeightC*y]+
F1[1]*pY[0][SubHeightC*y+1]+2)>>2
方法。
フィルタ処理されたエリアの位置がブロック境界にあるときにフィルタリングプロセスを調整することを更に有する方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F1,F2,F3}の組について、次が適用される:
F2[0]=1,F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
availTがFALSEに等しい場合に、x=-1..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]が、ルーマサンプルpY[x][0]に等しくセットされ、あるいは、
availLがFALSEに等しい場合に、x=-1,-2,-3,y=-1..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]が、ルーマサンプルpY[0][y]に等しくセットされる、
ことを有する、方法。
本願で使用される数学演算子は、Cプログラミング言語で使用されているものと類似している。しかし、整数除算及び算術シフト演算の結果は、より厳密に定義され、指数及び実数値除算のような、更なる演算が定義される。番号付け及び計数の規則は、一般的に0から始まり、例えば、「第1」は0番目と等価であり、「第2」は1番目と等価である、など。
以下の算術演算子が、次のように定義される:
x&&y x及びyのブール論理“AND”
x||y x及びyのブール論理“OR”
! ブール論理“NOT”
x?y:z xがTRUEであるか、又は0に等しくない場合には、yの値として評価し、そうでない場合には、zの値として評価する。
以下の関係演算子が、次のように定義される:
> ~よりも大きい
>= ~以上
< ~よりも小さい
<= ~以下
== ~に等しい
!= ~に等しくない。
以下のビット演算子が、次のように定義される:
& ビット単位“AND”。整数引数に作用する場合に、整数値の2の補数表現に作用する。他の引数よりも少ないビットを含む2進引数に作用する場合に、より短い方の引数は、0に等しい更なる有効ビットを加えることによって拡張される。
| ビット単位“OR”。整数引数に作用する場合に、整数値の2の補数表現に作用する。他の引数よりも少ないビットを含む2進引数に作用する場合に、より短い方の引数は、0に等しい更なる有効ビットを加えることによって拡張される。
^ ビット単位“XOR”。整数引数に作用する場合に、整数値の2の補数表現に作用する。他の引数よりも少ないビットを含む2進引数に作用する場合に、より短い方の引数は、0に等しい更なる有効ビットを加えることによって拡張される。
x>>y y個の2進桁によるxの2の補数整数表現の算術右シフト。この関数は、yの非負整数値についてのみ定義される。右シフトの結果として最上位ビット(MSB)へシフトされたビットは、シフト演算の前のxのMSBに等しい値を有する。
x<<y y個の2進桁によるxの2の補数整数表現の算術左シフト。この関数は、yの非負整数値についてのみ定義される。左シフトの結果として最下位ビット(LSB)へシフトされたビットは、0に等しい値を有する。
以下の算術演算子が、次のように定義される:
= 代入演算子
++ インクリメント、すなわち、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)と等価である。
以下の表記は、値の範囲を指定するために使用される:
x=y..z x、y及びzは整数であり、zはyよりも大きいとして、xは、y以上z以下の整数値を呈する。
以下の数学関数が定義される:
Atan(x) 引数xに作用して、出力値がラジアン単位で-π÷2以上π÷2以下の範囲内にある三角関数の逆正接関数
Clip1Y(x)=Clip3(0,(1<<BitDepthY)-1,x)
Clip1C(x)=Clip3(0,(1<<BitDepthC)-1,x)
Floor(x) x以下の最大の整数
Log2(x) xの底2の対数
Log10(x) xの底10の対数
Sqrt(x)=√x
Swap(x,y)=(y,x)
Tan(x) ラジアン単位で引数xに作用する三角関数の正接関数。
式中の優先順位がパラメータの使用によって明示的に示されていない場合に、以下の規則が適用される:
・優先度のより高い演算は、優先度のより低い演算の前に評価される。
・同じ優先度の演算は、左から右に順番に評価される。
テキスト中で、次の形式で数学的に記述されることになる論理演算のステートメント:
if(条件0)
ステートメント0
else if(条件1)
ステートメント1
・・・
else/*残りの条件に関する説明的所見*/
ステートメントn
は、次の様態で記述されてもよい:
・・・次のように/・・・次が適用される:
- 条件0の場合に、ステートメント0
- そうではなく、条件1の場合に、ステートメント1
- ・・・
- 上記以外の場合に(残りの条件に関する説明的所見)、ステートメントn
if(条件0a&&条件0b)
ステートメント0
else if(条件1a||条件1b)
ステートメント1
・・・
else
ステートメントn
は、次の様態で記述されてもよい:
・・・次のように/・・・次が適用される:
- 次の全ての条件が真である場合に、ステートメント0:
- 条件0a
- 条件0b
- そうではない場合に、次の条件の1つ以上が真である場合に、ステートメント1:
- 条件1a
- 条件1b
- ・・・
- 上記以外の場合に、ステートメントn
if(条件0)
ステートメント0
if(条件1)
ステートメント1
は、次の様態で記述されてもよい:
条件0の場合に、ステートメント0
条件1の場合に、ステートメント1
本特許出願は、2019年12月30日付けで出願された米国特許仮出願第62/955,405号、及び2020年1月7日付けで出願された米国特許仮出願第62/958,293号に対する優先権を主張するものであり、これらの各出願は、その全文を参照により本願に援用される。
現在ブロックが属するピクチャのクロマフォーマットに基づき、ブロックに属する(つまり、現在ブロックの内部サンプル)ルーマサンプル(例えば、各ルーマサンプル)に対するフィルタを決定することを含み、特に、異なるルーマサンプルは、異なるフィルタに対応し得る。基本的には、それが境界にあるかどうかに依存する。
現在ブロックに属するルーマサンプル(例えば、各ルーマサンプル)の位置で、決定されたフィルタを再構成されたルーマサンプルに適用して、フィルタ処理された再構成されたルーマサンプル(例えば、Rec’L[x,y])を取得する。
フィルタ処理された再構成されたルーマサンプルに基づき、線形モデル導出の入力として使用されるルーマサンプルのセットを取得する。
線形モデル導出の線形モデル係数及びフィルタ処理された再構成されたルーマサンプルに基づき交差成分予測(例えば、ルーマからクロマの交差成分予測又はCCLM予測)を実行する。
CCLM==chroma from luma。
現在ブロック内のルーマサンプルの位置及びクロマフォーマットに基づきフィルタを決定すること、又は
現在ブロック内のルーマサンプルの各々の位置及びクロマフォーマットに基づき、現在ブロックに属する複数のルーマサンプルに対する各々のフィルタを決定すること
を有する。現在ブロックに隣接するサンプルが利用可能である場合に、フィルタは、現在ブロックの境界エリアをフィルタ処理するためにそれらも使用し得る。
現在ブロックが属するピクチャのクロマフォーマット、
現在ブロック内のルーマサンプルの位置、
現在ブロックに属するルーマサンプルの数、
現在ブロックの幅及び高さ、及び
現在ブロック内のルーマサンプルに対するサブサンプリングされたクロマサンプルの位置
のうちの1つ以上に基づき、フィルタを決定することを有する。
サブサンプリングされたクロマサンプルが対応するルーマサンプルと同一位置にある場合に、複数のフィルタと現在ブロックの幅及び高さの値との間の第2又は第3関係(例えば、表2又は表3のどちらか一方)が、フィルタの決定のために使用される。
フィルタ処理された再構成されたルーマサンプル(例えば、Rec’L[x,y])からサブサンプリングされる境界ルーマ再構成サンプルを有する。
predC(i,j)=α・recL’(i,j)+β
に基づき取得される。ここで、predC(i,j)は、クロマサンプルを表し、recL(i,j)は、対応する再構成されたルーマサンプルを表す。
線形モデル(例えば、交差成分線形モデル,CCLM、又は多方向線形モデル,MDLM)を用いてイントラ予測を実行することと、
複数のシンタックス要素を含むビットストリームを生成することであり、複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素(例えば、CCLMのルーマフィルタの選択、特に、sps_cclm_colocated_chroma_flagのような、SPSフラグ)を含む、ことと
を有する方法に関係がある。
シンタックス要素の値が1又はTRUEであるとき、フィルタは、線形モデル決定及び予測のためにルーマサンプルに適用されない。
複数のシンタックス要素をビットストリームからパースすることであり、複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素(例えば、CCLMのルーマフィルタの選択、特に、sps_cclm_colocated_chroma_flagのような、SPSフラグ)を含む、ことと、
示された線形モデル(例えば、CCLM)を用いてイントラ予測を実行することと
を有する方法に関係がある。
シンタックス要素の値が1又はTRUEであるとき、フィルタは、線形モデル決定及び予測のためにルーマサンプルに適用されない。例えば、同一位置にある場合に、ルーマフィルタを使用しない。
1つ以上のプロセッサと、
プロセッサへ結合され、プロセッサによって実行されるプログラミングを記憶している非一時的なコンピュータ可読記憶媒体と
を有し、プログラミングは、プロセッサによって実行される場合に、第1若しくは第2の態様、又は第1若しくは第2若しくは第3の態様のとり得る実施形態に係る方法を実行するようにデコーダを構成する、デコーダに関係がある。
1つ以上のプロセッサと、
プロセッサへ結合され、プロセッサによって実行されるプログラミングを記憶している非一時的なコンピュータ可読記憶媒体と
を有し、プログラミングは、プロセッサによって実行される場合に、第1若しくは第2の態様、又は第1若しくは第2若しくは第3の態様のとり得る実施形態に係る方法を実行するようにエンコーダを構成する、エンコーダに関係がある。
現在ブロックが属するピクチャのクロマフォーマットに基づき、ブロックに属するルーマサンプル(例えば、各ルーマサンプル)に対するフィルタを決定するよう構成される決定ユニットと、
現在ブロックに属するルーマサンプル(例えば、各ルーマサンプル)の位置で、決定されたフィルタを再構成されたルーマサンプルに適用して、フィルタ処理された再構成されたルーマサンプル(例えば、Rec’L[x,y])を取得するよう構成されるフィルタリングユニットと、
フィルタ処理された再構成されたルーマサンプルに基づき、線形モデル導出の入力として使用されるルーマサンプルのセットを取得するよう構成される取得ユニットと、
線形モデル導出の線形モデル係数及びフィルタ処理された再構成されたルーマサンプルに基づき交差成分予測(例えば、ルーマからクロマの交差成分予測又はCCLM予測)を実行するよう構成される予測ユニットと
を有する装置に関係がある。
現在ブロックが属するピクチャのクロマフォーマットに基づきダウンサンプリングフィルタの組を決定するステップと、
再構成された隣接する上側ルーマサンプルが利用可能でないとき、再構成されたルーマブロックからのパディングによって隣接サンプルの2つの上行を取得するステップと、
再構成された隣接する左側ルーマサンプルが利用可能でないとき、再構成されたルーマサンプルからのパディングによって隣接サンプルの3つの左列を取得するステップと、
現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを取得するステップと、
ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを、取得された隣接サンプルの2つの上行のうちの選択されたサンプルに適用することによって、上側のダウンサンプリングされたルーマ参照サンプルを取得するステップであり、選択されたサンプルが左上位置(1202)にあるとき、各々のダウンサンプリングフィルタは、再構成された隣接サンプルとパディングされた隣接サンプルとの組み合わせに適用される、ステップと、
ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを、取得された隣接サンプルの3つの左列のうちの選択されたサンプルに適用することによって、左側のダウンサンプリングされたルーマ参照サンプルを取得するステップと、
上側若しくは左側又は上側及び左側の組み合わせのダウンサンプリングされたルーマ参照サンプルと、ダウンサンプリングされたルーマ参照サンプルに対応するクロマ参照サンプルとに基づき、1つ以上の線形モデル係数を決定するステップと、
線形モデル係数及びルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルに基づき、ルーマブロックに対応するクロマブロックの予測サンプルを取得するステップと
を有する。
ABT:asymmetric BT
AMVP:advanced motion vector prediction
ASIC:application-specific integrated circuit
AVC:Advanced Video Coding
B:bidirectional prediction
BT:binary tree
CABAC:context-adaptive binary arithmetic coding
CAVLC:context-adaptive variable-length coding
CD:compact disc
CD-ROM:compact disc read-only memory
CPU:central processing unit
CRT:cathode-ray tube
CTU:coding tree unit
CU:coding unit
DASH:Dynamic Adaptive Streaming over HTTP
DCT:discrete cosine transform
DMM:depth modeling mode
DRAM:dynamic random-access memory
DSL:digital subscriber line
DSP:digital signal processor
DVD:digital video disc
EEPROM:electrically-erasable programmable read-only memory
EO:electrical-to-optical
FPGA:field-programmable gate array
FTP:File Transfer Protocol
GOP:group of pictures
GPB:generalized P/B
GPU:graphics processing unit
HD:high-definition
HEVC:High Efficiency Video Coding
HM:HEVC Test Model
I:intra-mode
IC:integrated circuit
ISO/IEC:International Organization for Standardization/International Electrotechnical Commission
ITU-T:International Telecommunications Union Telecommunication Standardization Sector
JVET:Joint Video Exploration Team
LCD:liquid-crystal display
LCU:largest coding unit
LED:light-emitting diode
MPEG:Motion Picture Expert Group
MPEG-2:Motion Picture Expert Group 2
MPEG-4:Motion Picture Expert Group 4
MTT:multi-type tree
mux-demux:multiplexer-demultiplexer
MV:motion vector
NAS:network-attached storage
OE:optical-to-electrical
OLED:organic light-emitting diode
PIPE:probability interval portioning entropy
P:unidirectional prediction
PPS:picture parameter set
PU:prediction unit
QT:quadtree, quaternary tree
QTBT:quadtree plus binary tree
RAM:random-access memory
RDO:rate-distortion optimization
RF:radio frequency
ROM:read-only memory
Rx:receiver unit
SAD:sum of absolute differences
SBAC:syntax-based arithmetic coding
SH:slice header
SPS:sequence parameter set
SRAM:static random-access memory
SSD:sum of squared differences
SubCE:SubCore Experiment
TCAM:ternary content-addressable memory
TT:ternary tree
Tx:transmitter unit
TU:transform unit
UDP:User Datagram Protocol
VCEG:Video Coding Experts Group
VTM:VVC Test Model
VVC:Versatile Video Coding
図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は、ハイブリッドビデオエンコーダ、又はハイブリッドビデオコーデックに従うビデオエンコーダとも呼ばれ得る。
エンコーダ20は、例えば、入力部202を介して、ピクチャ17(又はピクチャデータ17)、例えば、ビデオ又はビデオシーケンスを形成するピクチャの連続の中のピクチャ、を受け取るよう構成されてよい。受け取られたピクチャ又はピクチャデータは、前処理されたピクチャ19(又は前処理されたピクチャデータ19)であってもよい。簡単のために、以下の説明はピクチャ17に言及する。ピクチャ17は、現在のピクチャ又はコーディングされるべきピクチャとも呼ばれ得る(特に、ビデオコーディングにおいて、現在のピクチャを他のピクチャ、例えば、同じビデオシーケンス、すなわち、現在のピクチャも含むビデオシーケンスの、前に符号化及び/又は復号されたピクチャと区別するため)。
残差計算ユニット204は、ピクチャブロック203及び予測ブロック265(予測ブロック265に関する更なる詳細は後述される)に基づいて、例えば、サンプル領域で残差ブロック205を取得するようサンプルごとに(ピクセルごとに)ピクチャブロック203のサンプル値から予測ブロック265のサンプル値を減じることによって、残差ブロック205(残差205とも呼ばれる)を計算するよう構成されてよい。
変換処理ユニット206は、変換領域で変換係数207を取得するために残差ブロック205のサンプル値に対して変換、例えば、離散コサイン変換(DCT)又は離散サイン変換(DST)を適用するよう構成されてよい。変換係数207は、変換残差係数とも呼ばれ、変換領域での残差ブロック205を表し得る。
量子化ユニット208は、例えば、スカラー量子化又はベクトル量子化を適用することによって、量子化された係数209を取得するように変換係数207を量子化するよう構成されてよい。量子化された係数209は、量子化された変換係数209又は量子化された残差係数209とも呼ばれ得る。
逆量子化ユニット210は、例えば、量子化ユニット208と同じ量子化ステップサイズに基づいて又はそれを用いて、量子化ユニット208によって適用された量子化スキームの逆を適用することによって、逆量子化された係数211を取得するために、量子化された係数に対して量子化ユニット208の逆の量子化を適用するよう構成される。逆量子化された係数211は、逆量子化された残差係数211とも呼ばれ、通常は量子化による損失により変換係数と同じでないが、変換係数207に対応し得る。
逆変換処理ユニット212は、再構成された残差ブロック213(又は対応する逆量子化された係数213)をサンプル領域で取得するために、変換処理ユニット206によって適用された変換の逆変換、例えば、逆離散コサイン変換(DCT)若しくは逆離散サイン変換(DST)又は他の逆変換を適用するよう構成される。再構成された残差ブロック213は、変換ブロック213とも呼ばれ得る。
再構成ユニット214(例えば、加算器又は合算器214)は、例えば、再構成された残差ブロック213のサンプル値と予測ブロック265のサンプル値とをサンプルごとに足すことによって、再構成されたブロック215をサンプル領域で取得するために変換ブロック213(すなわち、再構成された残差ブロック213)を予測ブロック265に加えるよう構成される。
ループフィルタユニット220(略して「ループフィルタ」220)は、再構成されたブロック215にフィルタをかけてフィルタ処理されたブロック221を取得するよう、又は一般的に、再構成されたサンプルにフィルタをかけてフィルタ処理されたサンプルを取得するよう構成される。ループフィルタユニットは、例えば、ピクセル遷移を滑らかにするよう、あるいは、別なふうにビデオ品質を改善するよう構成される。ループフィルタユニット220は、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ又は1つ以上の他のフィルタ、例えば、バイラテラルフィルタ、適応ループフィルタ(ALF)、先鋭化、平滑化フィルタ若しくは協調フィルタ、又はそれらの任意の組み合わせなどの1つ以上のループフィルタを有してよい。ループフィルタユニット220はインループフィルタであるものとして図2では示されているが、他の構成では、ループフィルタユニット220はポストループフィルタとして実装されてもよい。フィルタ処理されたブロック221は、フィルタ処理された再構成されたブロック221とも呼ばれ得る。
復号化ピクチャバッファ(DPB)230は、ビデオエンコーダ20によってビデオデータを符号化するための参照ピクチャ、又は一般的に、参照ピクチャデータを記憶するメモリであってよい。DPB230は、同期DRAM(SDRAM)を含む動的ランダム・アクセス・メモリ(DRAM)、磁気抵抗RAM(MRAM)、抵抗RAM(RRAM)、又は他のタイプのメモリデバイスなどの様々なメモリデバイスのいずれかによって形成されてよい。復号化ピクチャバッファ(DPB)230は、1つ以上のフィルタ処理されたブロック221を記憶するよう構成されてよい。復号化ピクチャバッファ230は、同じ現在ピクチャの、又は異なるピクチャ、例えば、前に再構成されたピクチャの、他の前にフィルタ処理されたブロック、例えば、前に再構成されフィルタ処理されたブロック221を記憶するよう更に構成されてよく、例えば、インター予測のために、完全な、前に再構成された、すなわち、復号されたピクチャ(並びに対応する参照ブロック及びサンプル)及び/又は部分的に再構成された現在ピクチャ(並びに対応する参照ブロック及びサンプル)を提供してよい。復号化ピクチャバッファ(DPB)230はまた、例えば、再構成されたブロック215がループフィルタユニット220によってフィルタをかけられていない場合に、1つ以上のフィルタ処理されていない再構成されたブロック215、又は一般的に、フィルタ処理されていない再構成されたサンプルを、あるいは、再構成されたブロック又はサンプルのあらゆる他の更に処理されたバージョンを記憶するよう構成されてもよい。
モード選択ユニット260は、パーティショニングユニット262、インター予測ユニット244及びイントラ予測ユニット254を有し、原ピクチャデータ、例えば、元のブロック203(現在ピクチャ17の現在ブロック203)と、再構成されたピクチャデータ、例えば、同じ(現在)ピクチャの及び/又は1つ若しくは複数の前に復号されたピクチャからの、例えば、復号化ピクチャバッファ230若しくは他のバッファ(例えば、ラインバッファ、図示せず)からのフィルタ処理された及び/又はフィルタ処理されていない再構成されたサンプル又はブロックを受信又は取得するよう構成される。再構成されたピクチャデータは、予測ブロック265又は予測子265を取得するために、予測、例えば、インター予測又はイントラ予測、のための参照ピクチャデータとして使用される。
パーティショニングユニット262は、現在ブロック203をより小さいパーティション、例えば、正方形又は長方形サイズのより小さいブロックにパーティション化(又は分割)してよい。これらのより小さいブロック(サブブロックとも呼ばれる)は、より一層小さいパーティションに更にパーティション化されてもよい。これは、ツリーパーティショニング又は階層ツリーパーティショニングとも呼ばれ、例えば、根ツリーレベル0(階層レベル0、デプス0)での、ルートブロックは、再帰的にパーティション化されてよく、例えば、次に下のツリーレベルの2つ以上のブロック、例えば、ツリーレベル1(階層レベル1、デプス1)でのノードにパーティション化され、これらのブロックは、例えば、終了基準が満足されること、例えば、最大ツリーデプス又は最小ブロックサイズに達することで、パーティショニングが終了するまで、次に下のレベル、例えば、ツリーレベル2(階層レベル2、デプス2)など、の2つ以上のブロックに再びパーティション化されてよい。これ以上パーティション化されないブロックは、ツリーのリーフブロック又はリーフノードとも呼ばれる。2つのパーティションにパーティション化することによるツリーは、二分木(BT)と呼ばれ、3つのパーティションにパーティション化することによるツリーは、三分木(TT)と呼ばれ、4つのパーティションにパーティション化することによるツリーは、四分木(QT)と呼ばれる。
イントラ予測モードの組は、35個の異なるイントラ予測モード、例えば、DC(又は平均)モード及びプレーナーモードのような無指向性モード、又は例えば、HEVCで定義されるような、指向性モードを有してよく、あるいは、67個の異なるイントラ予測モード、例えば、DC(又は平均)モード及びプレーナーモードのような無指向性モード、又は例えば、VVCで定義されるような、指向性モードを有してよい。
(とり得る)インター予測モードの組は、利用可能な参照ピクチャ(すなわち、例えば、DPB230に記憶されている、前の、少なくとも部分的に復号されたピクチャ)及び他のインター予測パラメータ、例えば、参照ピクチャ全体又は参照ピクチャの一部分のみ、例えば、現在ブロックのエリアの周りの探索窓エリア、が最良の一致を示す参照ブロックを探すために使用されるかどうか、及び/又は例えば、ピクセル補間、例えば、ハーフ/セミペル及び/又は4分の1ペル補間、が適用されるか否か、に依存する。
エントロピ符号化ユニット270は、出力部272を介して、例えば、符号化されたビットストリーム21の形で、出力され得る符号化されたピクチャデータ21を取得するために、量子化された係数209、インター予測パラメータ、イントラ予測パラメータ、ループフィルタパラメータ及び/又は他のシンタックス要素に対して、例えば、エントロピ符号化アルゴリズム又はスキーム(例えば、可変長コーディング(VLC)スキーム、コンテキスト適応VLCスキーム(CAVLC)、算術コーディングスキーム、二値化、コンテキスト適応二値算術コーディング(CABAC)、シンタックスに基づくコンテキスト適応二値算術コーディング(SBAC)、確率区間パーティショニングエントロピ(PIPE)コーディング、又は他のエントロピ符号化メソッドロジ若しくは技術)を適用するか、あるいは、バイパスする(無圧縮)よう構成され、それにより、例えば、ビデオデコーダ30は、パラメータを受け取って復号化のために使用し得る。符号化されたビットストリーム21は、ビデオデコーダ30へ送られるか、あるいは、ビデオデコーダ30による後の伝送又は読み出しのためにメモリに記憶されてもよい。
図3は、本願の技術を実装するよう構成されるビデオデコーダ30の例を示す。ビデオデコーダ30は、復号されたピクチャ331を取得するために、例えば、エンコーダ20によって符号化された、符号化ピクチャデータ21(例えば、符号化ビットストリーム21)を受信するよう構成される。符号化ピクチャデータ又はビットストリームは、符号化ピクチャデータを復号するための情報、例えば、符号化されたビデオスライスのピクチャブロック及び関連するシンタックス要素を表すデータ、を含む。
エントロピ復号化ユニット304は、ビットストリーム21(又は一般に、符号化ピクチャデータ21)をパースし、符号化ピクチャデータ21に対して、例えば、エントロピ復号化を実行して、例えば、量子化された係数309及び/又は復号されたコーディングパラメータ(図3に図示せず)、例えば、インター予測パラメータ(例えば、参照ピクチャインデックス及び動きベクトル)、イントラ予測パラメータ(例えば、イントラ予測モード又はインデックス)、変換パラメータ、量子化パラメータ、ループフィルタパラメータ、及び/又は他のシンタックス要素のいずれか又は全てを取得するよう構成される。エントロピ復号化ユニット304は、エンコーダ20のエントロピ符号化ユニット270に関して説明された符号化スキームに対応する復号化アルゴリズム又はスキームを適用するよう構成されてよい。エントロピ復号化ユニット304は、インター予測パラメータ、イントラ予測パラメータ、及び/又は他のシンタックス要素をモード適用ユニット360へ、及び他のパラメータをデコーダ30の他のユニットへ供給するよう更に構成されてよい。ビデオデコーダ30は、ビデオスライスレベル及び/又はビデオブロックレベルでシンタックス要素を受け取ってよい。スライス及び各々のシンタックス要素に加えて、又はそれらに代えて、グループ及び/又はタイル並びに各々のシンタックス要素が受信及び/又は使用されてもよい。
逆量子化ユニット310は、(例えば、エントロピ復号化ユニット304によって、例えば、パース及び/又は復号することによって)符号化ピクチャデータ21から量子化パラメータ(QP)(又は一般に、逆量子化に関する情報)及び量子化された係数を受け取り、量子化パラメータに基づいて、復号された量子化された係数309に対して逆量子化を適用して、変換係数311とも呼ばれ得る逆量子化された係数311を取得するよう構成されてよい。逆量子化プロセスは、量子化の程度及び、同様に、適用されるべき逆量子化の程度、を決定するために、ビデオスライス内の各ビデオブロックについてビデオエンコーダ20によって決定された量子化パラメータの使用を含んでよい。
逆変換処理ユニット312は、変換係数311とも呼ばれる逆量子化された係数311を受け取り、そして、再構成された残差ブロック313をサンプル領域で取得するために、逆量子化された係数311に対して変換を適用するよう構成されてよい。再構成された残差ブロック313は、変換ブロック313とも呼ばれ得る。変換は、逆変換、例えば、逆DCT、逆DST、逆整数変換、又は概念的に類似した逆変換プロセスであってよい。逆変換処理ユニット312は、逆量子化された係数311に適用されるべき変換を決定するために(例えば、エントロピ復号化ユニット304によって、例えば、パース及び/又は復号することによって)符号化ピクチャデータ21から変換パラメータ又は対応する情報を受け取るよう更に構成されてもよい。
再構成ユニット314(例えば、加算器又は合算器314)は、例えば、再構成された残差ブロック313のサンプル値と予測ブロック365のサンプル値とを足すことによって、再構成されたブロック315をサンプル領域で取得するように、再構成された残差ブロック313を予測ブロック365に加えるよう構成されてよい。
ループフィルタユニット320(コーディングループ内にあるか又はコーディングループの後にあるかのどちらか)は、フィルタ処理されたブロック321を取得するために、例えば、ピクセル遷移を滑らかにするか又は別なふうにビデオ品質を改善するために、再構成されたブロック315にフィルタをかけるよう構成される。ループフィルタユニット320は、デブロッキングフィルタ、サンプル適応オフセット(SAO)フィルタ又は1つ以上の他のフィルタ、例えば、バイラテラルフィルタ、適応ループフィルタ(ALF)、先鋭化、平滑化フィルタ若しくは協調フィルタ、又はそれらの任意の組み合わせなどの1つ以上のループフィルタを有してよい。ループフィルタユニット320はインループフィルタであるものとして図3では示されているが、他の構成では、ループフィルタユニット320はポストループフィルタとして実装されてもよい。
ピクチャの復号されたビデオブロック321は、次いで、復号化ピクチャバッファ330に記憶される。復号化ピクチャバッファ330は、他のピクチャのその後の動き補償のために、及び/又は夫々表示を出力するために、復号されたピクチャ331を参照ピクチャとして記憶する。
インター予測ユニット344は、インター予測ユニット244と(特に、動き補償ユニットと)同じであってよく、イントラ予測ユニット354は、機能においてイントラ予測ユニット254と同じであってよく、符号化ピクチャデータ21から(例えば、エントロピ復号化ユニット304によって、例えば、パース及び/又は復号することによって)受け取られたパーティショニング及び/又は予測パラメータ、あるいは各々の情報に基づいて、分割又はパーティショニング決定及び予測を実行する。モード適用ユニット360は、再構成されたピクチャ、ブロック又は各々のサンプル(フィルタ処理された又はフィルタ処理されていない)に基づいてブロックごとに予測(イントラ又はインター予測)を実行して予測ブロック365を取得するよう構成されてよい。
ux=(mvx+2bitDepth)%2bitDepth (1)
mvx=(ux>=2bitDepth-1)?(ux-2bitDepth):ux (2)
uy=(mvy+2bitDepth)%2bitDepth (3)
mvy=(uy>=2bitDepth-1)?(uy-2bitDepth):uy (4)
ここで、mvxは、画像ブロック又はサブブロックの動きベクトルの水平成分であり、mvyは、画像ブロック又はサブブロックの動きベクトルの垂直成分であり、ux及びuyは、中間値を示す。例えば、mvxの値が-32769である場合に、式(1)及び(2)を適用した後に、結果として得られる値は32767である。コンピュータシステムでは、10進数は2の補数として記憶される。-32769の2の補数は、1,0111,1111,1111,1111(17ビット)であり、その場合に、MSBは捨てられるので、結果として得られる2の補数は、0111,1111,1111,1111(10進数は32767である)であり、これは、式(1)及び(2)を適用することによる出力と同じである。
ux=(mvpx+mvdx+2bitDepth)%2bitDepth (5)
mvx=(ux>=2bitDepth-1)?(ux-2bitDepth):ux (6)
uy=(mvpy+mvdy+2bitDepth)%2bitDepth (7)
mvy=(uy>=2bitDepth-1)?(uy-2bitDepth):uy (8)
式(5)から(8)に示されるように、演算は、mvp及びmvdの合算中に適用されてよい。
vx=Clip3(-2bitDepth-1,2bitDepth-1-1,vx)
vy=Clip3(-2bitDepth-1,2bitDepth-1-1,vy)
ここで、vxは、画像ブロック又はサブブロックの動きベクトルの水平成分であり、vyは、画像ブロック又はサブブロックの動きベクトルの垂直成分であり、x、y及びzは、夫々、MVクリッピングプロセスの3つの入力値に対応し、関数Clip3の定義は、次の通りである:
C(x,y)=α×L(x,y)+β
ここで、C及びLは、夫々、クロマ値及びルーマ値を示す。パラメータα及びβは、次のように、最小二乗法によって導出される:
α=R(L,C)/R(L,L)
β=M(C)-α×M(L)
ここで、M(A)は、Aの平均を表し、R(A,B)は、次のように定義される:
R(A,B)=M((A-M(A))×(B-M(B)))
α={C(B)-C(A)}/{L(B)-L(A)}
β=L(A)-αC(A)
ここで、B=argmax(L(n))及びA=argmin(L(n))は、ルーマサンプルでの最大及び最小値の位置である。
Rec’L[x,y]=(2×RecL[2x,2y]+2×RecL[2x,2y+1]+RecL[2x-1,2y]+RecL[2x+1,2y]+RecL[2x-1,2y+1]+RecL[2x+1,2y+1]+4)>>3
このダウンサンプリングは、ルーマサンプルの位置に対するクロマサンプルの位置について「type0」位相関係、つまり、水平方向ではコロケーテッドサンプリング及び垂直方向ではインタースティシャルサンプリング、を仮定している点に留意されたい。図9に示されている上記の6-タップダウンサンプリングは、単一モデルCCLMモード及び多重モデルCCLMモードの両方についてデフォルトフィルタとして使用される。6-タップダウンサンプリングフィルタによって使用されるサンプルの空間位置は、図9に示される。サンプル901、902、及び903は、夫々、2、1、及び0の重みを有する。
y=0で行がCTUの最初の行であり、x=0であり、かつ、左及び上の隣接ブロックが利用不可能であるならば、Rec’L[x,y]=RecL[2x,2y]であり、
y=0で行がCTUの最初の行であり、かつ、上の隣接ブロックが利用不可能であるならば、Rec’L[x,y]=(2×RecL[2x,2y]+RecL[2x-1,2y]+RecL[2x+1,2y]+2)>>2であり、
x=0であり、かつ、左及び上の隣接ブロックが利用不可能であるならば、Rec’L[x,y]=(RecL[2x,2y]+RecL[2x,2y+1]+1)>>1である。
このプロセスへの入力は:
- イントラ予測モードpredModeIntra、
- 現在ピクチャの左上サンプルに対する現在の変換ブロックの左上サンプルのサンプル位置(xTbC,yTbC)、
- 変換ブロックの幅を指定する変数nTbW、
- 変換ブロックの高さを指定する変数nTbH、
- x=-1,y=0..2*nTbH-1及びx=0..2*nTbW-1,y=-1であるクロマ隣接サンプルp[x][y]、である。
このプロセスの出力は、x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]である。
現在のルーマ位置(xTbY,yTbY)は、次のように導出される:
(xTbY,yTbY)=(xTbC<<1,yTbC<<1) (8-155)
変数availL、availT及びavailTLは、次のように導出される:
- ブロックの左隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC)を入力として用いて呼び出され、出力はavailLに割り当てられる。
- ブロックの上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC,yTbC-1)を入力として用いて呼び出され、出力はavailTに割り当てられる。
- ブロックの左上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC-1)を入力として用いて呼び出され、出力はavailTLに割り当てられる。
- 利用可能な右上隣接クロマサンプルの数numTopRightは、次のように導出される:
- 変数numTopRightは0に等しくセットされ、availTRはTRUEに等しくセットされる。
- predModeIntraがINTRA_T_CCLMに等しいとき、x=nTbW..2*nTbW-1について、availTRがFALSEに等しくなるか又はxが2*nTbW-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC+x,yTbC-1)を入力として用いて呼び出され、出力はavailTRに割り当てられる。
- availTRがTRUEに等しいとき、numTopRightは1だけインクリメントされる。
- 利用可能な左下隣接クロマサンプルの数numLeftBelowは、次のように導出される:
- 変数numLeftBelowは0に等しくセットされ、availLBはTRUEに等しくセットされる。
- predModeIntraがINTRA_L_CCLMに等しいとき、y=nTbH..2*nTbH-1について、availLBがFALSEに等しくなるか又はyが2*nTbH-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC+y)を入力として用いて呼び出され、出力はavailLBに割り当てられる。
- availLBがTRUEに等しいとき、numLeftBelowは1だけインクリメントされる。
上及び右上にある利用可能な隣接クロマサンプルの数numSampT並びに左及び左下にある利用可能な隣接クロマサンプルの数numSampLは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しいとき、次が適用される:
numSampT=availT?nTbW:0 (8-156)
numSampL=availL?nTbH:0 (8-157)
- そうでない場合には、次が適用される:
numSampT=(availT&&predModeIntra==INTRA_T_CCLM)?(nTbW+numTopRight):0 (8-158)
numSampL=(availL&&predModeIntra==INTRA_L_CCLM)?(nTbH+numLeftBelow):0 (8-159)
変数bCTUboundaryは、次のように導出される:
bCTUboundary=(yTbC&(1<<(CtbLog2SizeY-1)-1)==0)?TRUE:FALSE (8-160)
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]=1<<(BitDepthC-1)
(8-161)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*2-1,y=0..nTbH*2-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..2*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..2*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(pY[2*x][2*y-1]+pY[2*x-1][2*y]+4*pY[2*x][2*y]+pY[2*x+1][2*y]+pY[2*x][2*y+1]+4)>>3 (8-162)
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(pY[0][2*y-1]+pY[-1][2*y]+4*pY[0][2*y]+pY[1][2*y]+pY[0][2*y+1]+4)>>3 (8-163)
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(pY[0][2*y-1]+2*pY[0][2*y]+pY[0][2*y+1]+2)>>2 (8-164)
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=(pY[2*x][-1]+pY[2*x-1][0]+4*pY[2*x][0]+pY[2*x+1][0]+pY[2*x][1]+4)>>3 (8-165)
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=(pY[2*x-1][0]+2*pY[2*x][0]+pY[2*x+1][0]+2)>>2 (8-166)
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(pY[0][-1]+pY[-1][0]+4*pY[0][0]+pY[1][0]+pY[0][1]+4)>>3 (8-167)
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(pY[-1][0]+2*pY[0][0]+pY[1][0]+2)>>2 (8-168)
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(pY[0][-1]+2*pY[0][0]+pY[0][1]+2)>>2 (8-169)
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0] (8-170)
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(pY[2*x-1][2*y]+pY[2*x-1][2*y+1]+2*pY[2*x][2*y]+2*pY[2*x][2*y+1]+pY[2*x+1][2*y]+pY[2*x+1][2*y+1]+4)>>3 (8-171)
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(pY[-1][2*y]+pY[-1][2*y+1]+2*pY[0][2*y]+2*pY[0][2*y+1]+pY[1][2*y]+pY[1][2*y+1]+4)>>3 (8-172)
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(pY[0][2*y]+pY[0][2*y+1]+1)>>1 (8-173)
(外1)
は、フィルタバイパス動作(すなわち、出力値を入力値にセットすることによる)を含む異なる方法で実装されてよい。代替的に、それは、類似した加算及びシフト演算を用いて実装されてもよく、すなわち:
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=
(F[1][0]*pY[SubWidthC*x][SubHeightC*y-1]
+F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F[1][0]*pY[0][SubHeightC*y-1]
+F[0][1]*pY[-1][SubHeightC*y]
+F[1][1]*pY[0][SubHeightC*y]
+2)>>2
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(2*F[1][0]*pY[0][SubHeightC*y-1]
+F[1][1]*pY[0][SubHeightC*y]
+2)>>2
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]
+F[0][1]*pY[SubWidthC*x-1][0]
+F[1][1]*pY[SubWidthC*x][0]
+F[2][1]*pY[SubWidthC*x+1][0]
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]
+F[0][1]*pY[SubWidthC*x-1][0]
+F[1][1]*pY[SubWidthC*x][0]
+F[2][1]*pY[SubWidthC*x+1][0]
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=
(F[1][0]*pY[0][-1]
+F[0][1]*pY[-1][0]
+F[1][1]*pY[0][0]
+F[2][1]*pY[1][0]
+F[1][2]*pY[0][1]+4)>>3
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=
(F[0][1]*pY[-1][0]
+F[1][1]*pY[0][0]
+F[2][1]*pY[1][0]
+2)>>2
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(pY[0][-1]+2*pY[0][0]+pY[0][1]+2)>>2 (8-169)
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0] (8-170)
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=
(F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F[2][2]*pY[SubWidthC*x+1][SubHeghtC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F[0][1]*pY[-1][SubHeightC*y]
+F[0][2]*pY[-1][SubHeightC*y+1]
+F[1][1]*pY[0][SubHeightC*y]
+F[1][2]*pY[0][SubHeightC*y+1]
+F[2][1]*pY[1][SubHeightC*y]
+F[2][2]*pY[1][SubHeghtC*y+1]+4)>>3
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
+F[1][1]*pY[0][SubHeightC*y]
+F[1][2]*pY[0][SubHeightC*y+1]+1)>>1
8.4.4.2.8 INTRA_LT_CCLM、INTRA_L_CCLM及びINTRA_T_CCLMイントラ予測モードの仕様
このプロセスへの入力は:
- イントラ予測モードpredModeIntra、
- 現在ピクチャの左上サンプルに対する現在の変換ブロックの左上サンプルのサンプル位置(xTbC,yTbC)、
- 変換ブロックの幅を指定する変数nTbW、
- 変換ブロックの高さを指定する変数nTbH、
- x=-1,y=0..2*nTbH-1及びx=0..2*nTbW-1,y=-1であるクロマ隣接サンプルp[x][y]、である。
このプロセスの出力は、x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]である。
現在のルーマ位置(xTbY,yTbY)は、次のように導出される:
(xTbY,yTbY)=(xTbC<<(SubWidthC-1),yTbC<<(SubHeightC-1)) (8-156)
変数availL、availT及びavailTLは、次のように導出される:
- ブロックの左隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC)を入力として用いて呼び出され、出力はavailLに割り当てられる。
- ブロックの上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC,yTbC-1)を入力として用いて呼び出され、出力はavailTに割り当てられる。
- ブロックの左上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC-1)を入力として用いて呼び出され、出力はavailTLに割り当てられる。
- 利用可能な右上隣接クロマサンプルの数numTopRightは、次のように導出される:
- 変数numTopRightは0に等しくセットされ、availTRはTRUEに等しくセットされる。
- predModeIntraがINTRA_T_CCLMに等しいとき、x=nTbW..2*nTbW-1について、availTRがFALSEに等しくなるか又はxが2*nTbW-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC+x,yTbC-1)を入力として用いて呼び出され、出力はavailTRに割り当てられる。
- availTRがTRUEに等しいとき、numTopRightは1だけインクリメントされる。
- 利用可能な左下隣接クロマサンプルの数numLeftBelowは、次のように導出される:
- 変数numLeftBelowは0に等しくセットされ、availLBはTRUEに等しくセットされる。
- predModeIntraがINTRA_L_CCLMに等しいとき、y=nTbH..2*nTbH-1について、availLBがFALSEに等しくなるか又はyが2*nTbH-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC+y)を入力として用いて呼び出され、出力はavailLBに割り当てられる。
- availLBがTRUEに等しいとき、numLeftBelowは1だけインクリメントされる。
上及び右上にある利用可能な隣接クロマサンプルの数numSampT並びに左及び左下にある利用可能な隣接クロマサンプルの数numSampLは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しいとき、次が適用される:
numSampT=availT?nTbW:0
numSampL=availL?nTbH:0
- そうでない場合には、次が適用される:
numSampT=(availT&&predModeIntra==INTRA_T_CCLM)?(nTbW+numTopRight):0
numSampL=(availL&&predModeIntra==INTRA_L_CCLM)?(nTbH+numLeftBelow):0
変数bCTUboundaryは、次のように導出される:
bCTUboundary=(yTbC&(1<<(CtbLog2SizeY-1)-1)==0)?TRUE:FALSE
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]=1<<(BitDepthC-1)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=pY[x][y]
//説明のためだけ:YUV 4:4:4用のフィルタなし//
そうでない場合に、フィルタ{F3,F5,F6}の組について、次が適用される。//ここでは、係数を定義する//
F3[0]=1,F3[1]=2,F3[2]=1
- SubWidthC==2及びSubHeightC==2である場合
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,F2[1]=1
- その他の場合
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,F2[1]=0
- //本願の実施形態の太字部分を参照//
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、F5にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[1][0]*pY[SubWidthC*x][SubHeightC*y-1]
+F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3
//ここで説明するためだけ:決定されたフィルタ及び“F”フィルタの他の全ての出現を適用//
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、F5にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[1][0]*pY[0][SubHeightC*y-1]
+F[0][1]*pY[-1][SubHeightC*y]
+F[1][1]*pY[0][SubHeightC*y]
+F[2][1]*pY[1][SubHeightC*y]
+F[1][2]*pY[0][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、F3にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y-1]
+F[1]*pY[0][SubHeightC*y]
+F[2]*pY[0][SubHeightC*y+1]
+2)>>2
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、F5にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]
+F[0][1]*pY[SubWidthC*x-1][0]
+F[1][1]*pY[SubWidthC*x][0]
+F[2][1]*pY[SubWidthC*x+1][0]
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、F3にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[0]*pY[SubWidthC*x-1][0]
+F[1]*pY[SubWidthC*x][0]
+F[2]*pY[SubWidthC*x+1][0]+2)>>2
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F5にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[1][0]*pY[0][-1]
+F[0][1]*pY[-1][0]
+F[1][1]*pY[0][0]
+F[2][1]*pY[1][0]
+F[1][2]*pY[0][1]+4)>>3
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[-1][0]
+F[1]*pY[0][0]
+F[2]*pY[1][0]
+2)>>2
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[0][-1]
+F[1]*pY[0][0]+F[2]*pY[0][1]
+2)>>2
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0]
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、F6にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、F6にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0][1]*pY[-1][SubHeightC*y]
+F[0][2]*pY[-1][SubHeightC*y+1]
+F[1][1]*pY[0][SubHeightC*y]
+F[1][2]*pY[0][SubHeightC*y+1]
+F[2][1]*pY[1][SubHeightC*y]
+F[2][2]*pY[1][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、F2にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y]
+F[1]*pY[0][SubHeightC*y+1]+1)>>1
4.numSampLが0よりも大きいとき、y=0..numSampL-1である、ダウンサンプリングされた隣接する左ルーマサンプルpLeftDsY[y]は、次のように導出される:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- y=0..nTbH-1であるpLeftDsY[y]は、次のように導出される:pLeftDsY[y]=pY[-1][y]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- y=1..nTbH-1であるpLeftDsY[y]は、F5にセットされたFについて、次のように導出される:
pLeftDsY[y]=
(F[1][0]*pY[-SubWidthC][SubHeightC*y-1]
+F[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F[1][1]*pY[-SubWidthC][SubHeightC*y]
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3
- availTLがTRUEに等しい場合に、pLeftDsY[0]は、F5にセットされたFについて、次のように導出される:
pLeftDsY[0]=
(F[1][0]*pY[-SubWidthC][-1]
+F[0][1]*pY[-1-SubWidthC][0]
+F[1][1]*pY[-SubWidthC][0]
+F[2][1]*pY[1-SubWidthC][0]
+F[1][2]*pY[-SubWidthC][1]+4)>>3
- そうでない場合に、pLeftDsY[0]は、F3にセットされたFについて、次のように導出される:
pLeftDsY[0]=
=(F[0]*pY[-1-SubWidthC][0]
+F[1]*pY[-SubWidthC][0]
+F[2]*pY[1-SubWidthC][0]
+2)>>2
- 他の場合に、F6にセットされたFについて、次が適用される:
pLeftDsY[y]=
(F[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]
+F[1][1]*pY[-SubWidthC][SubHeightC*y]
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3
5.numSampTが0よりも大きいとき、x=0..numSampT-1である、ダウンサンプリングされた隣接する上ルーマサンプルpTopDsY[x]は、次のように定められる:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- x=0..numSampT-1について、pTopDsY[x]=pY[x][-1]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- x=1..numSampT-1であるpTopDsY[x]は、次のように導出される:
- bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pTopDsY[x]=
(F[1][0]*pY[SubWidthC*x][-1-SubHeightC]
+F[0][1]*pY[SubWidthC*x-1][-SubHeightC]
+F[1][1]*pY[SubWidthC*x][-SubHeightC]
+F[2][1]*pY[SubWidthC*x+1][-SubHeightC]
+F[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pTopDsY[x]=
(F[0]*pY[SubWidthC*x-1][-1]
+F[1]*pY[SubWidthC*x][-1]
+F[2]*pY[SubWidthC*x+1][-1]
+2)>>2
- pTopDsY[0]は、次のように導出される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pTopDsY[0]=
(F[1][0]*pY[-1][-1-SubHeightC]
+F[0][1]*pY[-1][-SubHeightC]
+F[1][1]*pY[0][-SubHeightC]
+F[2][1]*pY[1][-SubHeightC]
+F[1][2]*pY[-1][1-SubHeightC]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pTopDsY[0]=
(F[0]*pY[-1][-1]
+F[1]*pY[0][-1]
+F[2]*pY[1][-1]
+2)>>2
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、F3にセットされたFについて、次が適用される:
pTopDsY[0]=
(F[0]*pY[0][-1]
+F[1]*pY[0][-2]
+F[2]*pY[0][-1]
+2)>>2
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pTopDsY[0]=pY[0][-1]
- 他の場合に、次が適用される:
- x=1..numSampT-1であるpTopDsY[x]は、次のように導出される:
- bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pTopDsY[x]=
(F[0][1]*pY[SubWidthC*x-1][-2]
+F[0][2]*pY[SubWidthC*x-1][-1]
+F[1][1]*pY[SubWidthC*x][-2]
+F[1][2]*pY[SubWidthC*x][-1]
+F[2][1]*pY[SubWidthC*x+1][-2]
+F[2][2]*pY[SubWidthC*x+1][-1]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pTopDsY[x]=
(F[0]*pY[SubWidthC*x-1][-1]
+F[1]*pY[SubWidthC*x][-1]
+F[2][1]*pY[SubWidthC*x+1][-1]
+2)>>2
- pTopDsY[0]は、次のように導出される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pTopDsY[0]=
(F[0][1]*pY[-1][-2]
+F[0][2]*pY[-1][-1]
+F[1][1]*pY[0][-2]
+F[1][2]*pY[0][-1]
+F[2][1]*pY[1][-2]
+F[2][2]*pY[1][-1]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pTopDsY[0]=
(F[0]*pY[-1][-1]
+F[1]*pY[0][-1]
+F[2]*pY[1][-1]
+2)>>2
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、F2にセットされたFについて、次が適用される:
pTopDsY[0]=(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pTopDsY[0]=pY[0][-1]
6.変数nS、xS、ySは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しい場合に、次が適用される:
nS=((availL&&availT)?Min(nTbW,nTbH):(availL?nTbH:nTbW))
xS=1<<(((nTbW>nTbH)&&availL&&availT)?(Log2(nTbW)-Log2(nTbH)):0) (8-192)
yS=1<<(((nTbH>nTbW)&&availL&&availT)?(Log2(nTbH)-Log2(nTbW)):0) (8-193)
- そうではなく、predModeIntraがINTRA_L_CCLMに等しい場合に、次が適用される:
nS=numSampL
xS=1
yS=1
- その他の場合(predModeIntraがINTRA_T_CCLMに等しい場合)に、次が適用される:
nS=numSampT
xS=1
yS=1
7.変数minY、maxY、minC及びmaxCは、次のように導出される:
- 変数minYは、1<<(BitDepthY)+1に等しくセットされ、変数maxYは、-1に等しくセットされる。
- availTがTRUEに等しい場合に、x=0..nS-1として、変数minY、maxY、minC及びmaxCは、次のように導出される:
- minYがpTopDsY[x*xS]よりも大きい場合に、次が適用される:
minY=pTopDsY[x*sS]
minC=p[x*xS][-1]
- maxYがpTopDsY[x*xS]よりも小さい場合に、次が適用される:
maxY=pTopDsY[x*xS]
maxC=p[x*xS][-1]
- availLがTRUEに等しい場合に、y=0..nS-1として、変数minY、maxY、minC及びmaxCは、次のように導出される:
- minYがpLeftDsY[y*yS]よりも大きい場合に、次が適用される:
minY=pLeftDsY[y*yS]
minC=p[-1][y*yS]
- maxYがpLeftDsY[y*yS]よりも小さい場合に、次が適用される:
maxY=pLeftDsY[y*yS]
maxC=p[-1][y*yS]
8.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0
a=0
b=1<<(BitDepthC-1)
- そうでない場合に、次が適用される:
diff=maxY-minY
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC
x=Floor(Log2(diff))
normDiff=((diff<<4)>>x)&15
x+=(normDiff!=0)?1:0
y=Floor(Log2(Abs(diffC)))+1
a=(diffC*(divSigTable[normDiff]|8)+2y-1)>>y
k=((3+x-y)<1)?1:3+x-y
a=((3+x-y)<1)?Sign(a)*15:a
b=minC-((a*minY)>>k)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0
a=0
b=minC
9.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1C(((pDsY[x][y]*a)>>k)+b)
●LMモードが適用される場合に、W’=W,H’=H;
●LM-Aモードが適用される場合に、W’=W+H;
●LM-Lモードが適用される場合に、H’=H+W
としてセットされる。
●LMモードが適用され、上側及び左側の両方の隣接サンプルが利用可能である場合に、S[W’/4,-1]、S[3W’/4,-1]、S[-1,H’/4]、S[-1,3H’/4];
●LM-Aモードが適用されるか、あるいは、上隣接サンプルのみが利用可能である場合に、S[W’/8,-1]、S[3W’/8,-1]、S[5W’/8,-1]、S[7W’/8,-1];
●LM-Lモードが適用されるか、あるいは、左隣接サンプルのみが利用可能である場合に、S[-1,H’/8]、S[-1,3H’/8]、S[-1,5H’/8]、S[-1,7H’/8]
として選択される。
xA=(x0 A+x1 A+1)>>1;
xB=(x0 B+x1 B+1)>>1;
yA=(y0 A+y1 A+1)>>1;
yB=(y0 B+y1 B+1)>>1
として導出される。
8.4.4.2.8 INTRA_LT_CCLM、INTRA_L_CCLM及びINTRA_T_CCLMイントラ予測モードの仕様
このプロセスへの入力は:
- イントラ予測モードpredModeIntra、
- 現在ピクチャの左上サンプルに対する現在の変換ブロックの左上サンプルのサンプル位置(xTbC,yTbC)、
- 変換ブロックの幅を指定する変数nTbW、
- 変換ブロックの高さを指定する変数nTbH、
- x=-1,y=0..2*nTbH-1及びx=0..2*nTbW-1,y=-1であるクロマ隣接サンプルp[x][y]、である。
このプロセスの出力は、x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]である。
現在のルーマ位置(xTbY,yTbY)は、次のように導出される:
(xTbY,yTbY)=(xTbC<<(SubWidthC-1),yTbC<<(SubHeightC-1))
変数availL、availT及びavailTLは、次のように導出される:
- ブロックの左隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC)を入力として用いて呼び出され、出力はavailLに割り当てられる。
- ブロックの上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC,yTbC-1)を入力として用いて呼び出され、出力はavailTに割り当てられる。
- ブロックの左上隣接サンプルの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC-1)を入力として用いて呼び出され、出力はavailTLに割り当てられる。
- 利用可能な右上隣接クロマサンプルの数numTopRightは、次のように導出される:
- 変数numTopRightは0に等しくセットされ、availTRはTRUEに等しくセットされる。
- predModeIntraがINTRA_T_CCLMに等しいとき、x=nTbW..2*nTbW-1について、availTRがFALSEに等しくなるか又はxが2*nTbW-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC+x,yTbC-1)を入力として用いて呼び出され、出力はavailTRに割り当てられる。
- availTRがTRUEに等しいとき、numTopRightは1だけインクリメントされる。
- 利用可能な左下隣接クロマサンプルの数numLeftBelowは、次のように導出される:
- 変数numLeftBelowは0に等しくセットされ、availLBはTRUEに等しくセットされる。
- predModeIntraがINTRA_L_CCLMに等しいとき、y=nTbH..2*nTbH-1について、availLBがFALSEに等しくなるか又はyが2*nTbH-1に等しくなるまで、次が適用される:
- ブロックの利用可能性導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)及び隣接するクロマ位置(xTbC-1,yTbC+y)を入力として用いて呼び出され、出力はavailLBに割り当てられる。
- availLBがTRUEに等しいとき、numLeftBelowは1だけインクリメントされる。
上及び右上にある利用可能な隣接クロマサンプルの数numSampT並びに左及び左下にある利用可能な隣接クロマサンプルの数numSampLは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しいとき、次が適用される:
numSampT=availT?nTbW:0
numSampL=availL?nTbH:0
- そうでない場合には、次が適用される:
numSampT=(availT&&predModeIntra==INTRA_T_CCLM)?(nTbW+Min(numTopRight,nTbH)):0
numSampL=(availL&&predModeIntra==INTRA_L_CCLM)?(nTbH+Min(numLeftBelow,nTbW)):0
変数bCTUboundaryは、次のように導出される:
bCTUboundary=(yTbC&(1<<(CtbLog2SizeY-1)-1)==0)?TRUE:FALSE
NがL及びTで置換される変数cntN及びアレイpickPosN[]は、次のように導出される:
- 変数numIs4Nは、((availT&&availL&&predModeIntra==INTRA LT CCLM)?0:1)に等しくセットされる。
- 変数startPosNは、numSampN>>(2+numIs4N)に等しくセットされる。
- 変数pickStepNは、Max(1,numSampN>>(1+numIs4N))に等しくセットされる。
- availNがTRUEに等しく、predModeIntraがINTRA_LT_CCLM又はINTRA_N_CCLMに等しい場合に、cntNは、Min(numSampN,(1+numIs4N)<<1)に等しくセットされ、pickPosN[pos]は、(startPosN+pos*pickStepN)に等しくセットされ、pos=0..(cntN-1)である。
- そうでない場合に、cntNは、0に等しくセットされる。
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]=1<<(BitDepthC-1)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=pY[x][y]
- そうでない場合に、フィルタ{F3,F5,F6}の組について、次が適用される:
F3[0]=1,F3[1]=2,F3[2]=1
- SubWidthC==2及びSubHeightC==2である場合
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,
F2[1]=1
- その他の場合
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,
F2[1]=0
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、F5にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[1][0]*pY[SubWidthC*x][SubHeightC*y-1]
+F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、F5にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[1][0]*pY[0][SubHeightC*y-1]
+F[0][1]*pY[-1][SubHeightC*y]
+F[1][1]*pY[0][SubHeightC*y]
+F[2][1]*pY[1][SubHeightC*y]
+F[1][2]*pY[0][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、F3にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y-1]
+F[1]*pY[0][SubHeightC*y]
+F[2]*pY[0][SubHeightC*y+1]
+2)>>2
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、F5にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]
+F[0][1]*pY[SubWidthC*x-1][0]
+F[1][1]*pY[SubWidthC*x][0]
+F[2][1]*pY[SubWidthC*x+1][0]
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、F3にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[0]*pY[SubWidthC*x-1][0]
+F[1]*pY[SubWidthC*x][0]
+F[2]*pY[SubWidthC*x+1][0]+2)>>2
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F5にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[1][0]*pY[0][-1]
+F[0][1]*pY[-1][0]
+F[1][1]*pY[0][0]
+F[2][1]*pY[1][0]
+F[1][2]*pY[0][1]+4)>>3
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[-1][0]
+F[1]*pY[0][0]
+F[2]*pY[1][0]
+2)>>2
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[0][-1]
+F[1]*pY[0][0]
+F[2]*pY[0][1]
+2)>>2
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0]
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、F6にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、F6にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0][1]*pY[-1][SubHeightC*y]
+F[0][2]*pY[-1][SubHeightC*y+1]
+F[1][1]*pY[0][SubHeightC*y]
+F[1][2]*pY[0][SubHeightC*y+1]
+F[2][1]*pY[1][SubHeightC*y]
+F[2][2]*pY[1][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、F2にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y]
+F[1]*pY[0][SubHeightC*y+1]+1)>>1
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..(cntL-1)として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..(cntL-1)として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- pSelDsY[i]=pY[-1][y]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- y>0||availTL==TRUEである場合に、F5にセットされたFについて:
pSelDsY[idx]=
(F[1][0]*pY[-SubWidthC][SubHeightC*y-1]
+F[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F[1][1]*pY[-SubWidthC][SubHeightC*y]
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3
- そうでない場合に、F3にセットされたFについて:
pSelDsY[idx]=
(F[0]*pY[-1-SubWidthC][0]
+F[1]*pY[-SubWidthC][0]
+F[2]*pY[1-SubWidthC][0]
+2)>>2
- 他の場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]
+F[1][1]*pY[-SubWidthC][SubHeightC*y]
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..(cntL+cntT-1)として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=cntL..cntL+cntT-1として、次のように導出される:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- pSelDsY[idx]=pY[x][-1]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- x>0である場合:
- bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[1][0]*pY[SubWidthC*x][-1-SubHeightC]
+F[0][1]*pY[SubWidthC*x-1][-SubHeightC]
+F[1][1]*pY[SubWidthC*x][-SubHeightC]
+F[2][1]*pY[SubWidthC*x+1][-SubHeightC]
+F[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[SubWidthC*x-1][-1]
+F[1]*pY[SubWidthC*x][-1]
+F[2]*pY[SubWidthC*x+1][-1]
+2)>>2
- 他の場合:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[1][0]*pY[-1][-1-SubHeightC]
+F[0][1]*pY[-1][-SubHeightC]
+F[1][1]*pY[0][-SubHeightC]
+F[2][1]*pY[1][-SubHeightC]
+F[1][2]*pY[-1][1-SubHeightC]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[-1][-1]
+F[1]*pY[0][-1]
+F[2]*pY[1][-1]
+2)>>2 (8-182)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[0][-1]
+F[1]*pY[0][-2]
+F[2]*pY[0][-1]
+2)>>2
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1]
- 他の場合に、次が適用される:
- x>0である場合:
- bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0][1]*pY[SubWidthC*x-1][-2]
+F[0][2]*pY[SubWidthC*x-1][-1]
+F[1][1]*pY[SubWidthC*x][-2]
+F[1][2]*pY[SubWidthC*x][-1]
+F[2][1]*pY[SubWidthC*x+1][-2]
+F[2][2]*pY[SubWidthC*x+1][-1]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[SubWidthC*x-1][-1]
+F[1]*pY[SubWidthC*x][-1]
+F[2][1]*pY[SubWidthC*x+1][-1]
+2)>>2
- 他の場合:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0][1]*pY[-1][-2]
+F[0][2]*pY[-1][-1]
+F[1][1]*pY[0][-2]
+F[1][2]*pY[0][-1]
+F[2][1]*pY[1][-2]
+F[2][2]*pY[1][-1]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[-1][-1]
+F[1]*pY[0][-1]
+F[2]*pY[1][-1]
+2)>>2
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、F2にセットされたFについて、次が適用される:
pSelDsY[idx]=(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1]
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]をpSelComp[0]に等しくセットし、pSelComp[2]をpSelComp[1]に等しくセットし、pSelComp[0]をpSelComp[1]に等しくセットし、pSelComp[1]をpSelComp[3]に等しくセットし、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx[]及びmaxGrpIdx[]は、minGrpIdx[0]=0、minGrpIdx[1]=2、maxGrpIdx[0]=1、maxGrpIdx[1]=3とセットされる。
- pSelDsY[minGrpIdx[0]]>pSelDsY[minGrpIdx[1]]である場合に、Swap(minGrpIdx[0],minGrpIdx[1])。
- pSelDsY[maxGrpIdx[0]]>pSelDsY[maxGrpIdx[1]]である場合に、Swap(maxGrpIdx[0],maxGrpIdx[1])。
- pSelDsY[minGrpIdx[0]]>pSelDsY[maxGrpIdx[1]]である場合に、Swap(minGrpIdx,maxGrpIdx)。
- pSelDsY[minGrpIdx[1]]>pSelDsY[maxGrpIdx[0]]である場合に、Swap(minGrpIdx[1],maxGrpIdx[0])。
- maxY=(pSelDsY[maxGrpIdx[0]]+pSelDsY[maxGrpIdx[1]]+1)>>1。
- maxC=(pSelC[maxGrpIdx[0]]+pSelC[maxGrpIdx[1]]+1)>>1。
- minY=(pSelDsY[minGrpIdx[0]]+pSelDsY[minGrpIdx[1]]+1)>>1。
- minC=(pSelC[minGrpIdx[0]]+pSelC[minGrpIdx[1]]+1)>>1。
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0
a=0
b=1<<(BitDepthC-1)
- そうでない場合に、次が適用される:
diff=maxY-minY
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC
x=Floor(Log2(diff))
normDiff=((diff<<4)>>x)&15
x+=(normDiff!=0)?1:0
y=Floor(Log2(Abs(diffC)))+1
a=(diffC*(divSigTable[normDiff]|8)+2y-1)>>y
k=((3+x-y)<1)?1:3+x-y
a=((3+x-y)<1)?Sign(a)*15:a
b=minC-((a*minY)>>k)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0
a=0
b=minC
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1C(((pDsY[x][y]*a)>>k)+b)
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]=1<<(BitDepthC-1)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=pY[x][y]
- そうでない場合に、フィルタ{F3,F5,F6}の組について、次が適用される:
F3[0]=1,F3[1]=2,F3[2]=1
- SubWidthC==2及びSubHeightC==2である場合
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,
F2[1]=1
- その他の場合
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,
F2[1]=0
- sps_cclm_colocated_chroma_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、F5にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[1][0]*pY[SubWidthC*x][SubHeightC*y-1]
+F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、F5にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[1][0]*pY[0][SubHeightC*y-1]
+F[0][1]*pY[-1][SubHeightC*y]
+F[1][1]*pY[0][SubHeightC*y]
+F[2][1]*pY[1][SubHeightC*y]
+F[1][2]*pY[0][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=1..nTbH-1とするpDsY[0][y]は、F3にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y-1]
+F[1]*pY[0][SubHeightC*y]
+F[2]*pY[0][SubHeightC*y+1]
+2)>>2
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、F5にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[1][0]*pY[SubWidthC*x][-1]
+F[0][1]*pY[SubWidthC*x-1][0]
+F[1][1]*pY[SubWidthC*x][0]
+F[2][1]*pY[SubWidthC*x+1][0]
+F[1][2]*pY[SubWidthC*x][1]+4)>>3
- そうでない場合には、x=1..nTbW-1とするpDsY[x][0]は、F3にセットされたFについて、次のように導出される:
pDsY[x][0]=
(F[0]*pY[SubWidthC*x-1][0]
+F[1]*pY[SubWidthC*x][0]
+F[2]*pY[SubWidthC*x+1][0]+2)>>2
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F5にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[1][0]*pY[0][-1]
+F[0][1]*pY[-1][0]
+F[1][1]*pY[0][0]
+F[2][1]*pY[1][0]
+F[1][2]*pY[0][1]+4)>>3
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[-1][0]
+F[1]*pY[0][0]
+F[2]*pY[1][0]
+2)>>2
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、F3にセットされたFについて、次のように導出される:
pDsY[0][0]=
(F[0]*pY[0][-1]
+F[1]*pY[0][0]
+F[2]*pY[0][1]
+2)>>2
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0]
- 他の場合には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、F6にセットされたFについて、次のように導出される:
pDsY[x][y]=
(F[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]
+F[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F[1][2]*pY[SubWidthC*x][SubHeightC*y+1]
+F[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、F6にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0][1]*pY[-1][SubHeightC*y]
+F[0][2]*pY[-1][SubHeightC*y+1]
+F[1][1]*pY[0][SubHeightC*y]
+F[1][2]*pY[0][SubHeightC*y+1]
+F[2][1]*pY[1][SubHeightC*y]
+F[2][2]*pY[1][SubHeightC*y+1]+4)>>3
- そうでない場合には、y=0..nTbH-1とするpDsY[0][y]は、F2にセットされたFについて、次のように導出される:
pDsY[0][y]=
(F[0]*pY[0][SubHeightC*y]
+F[1]*pY[0][SubHeightC*y+1]+1)>>1
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..(cntL-1)として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..(cntL-1)として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- pSelDsY[i]=pY[-1][y]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- y>0||availTL==TRUEである場合に、F5にセットされたFについて:
pSelDsY[idx]=
(F[1][0]*pY[-SubWidthC][SubHeightC*y-1]
+F[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F[1][1]*pY[-SubWidthC][SubHeightC*y]
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3
- そうでない場合に、F3にセットされたFについて:
pSelDsY[idx]=
(F[0]*pY[-1-SubWidthC][0]
+F[1]*pY[-SubWidthC][0]
+F[2]*pY[1-SubWidthC][0]
+2)>>2
- 他の場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]
+F[1][1]*pY[-SubWidthC][SubHeightC*y]
+F[1][2]*pY[-SubWidthC][SubHeightC*y+1]
+F[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..(cntL+cntT-1)として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=cntL..cntL+cntT-1として、次のように導出される:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC==1及びSubHeightC==1である場合に、次が適用される:
- pSelDsY[idx]=pY[x][-1]
- そうでない場合に、次が適用される:
- sps_cclm_colocated_chroma_flagが1に等しい場合に、次が適用される:
- x>0である場合:
- bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[1][0]*pY[SubWidthC*x][-1-SubHeightC]
+F[0][1]*pY[SubWidthC*x-1][-SubHeightC]
+F[1][1]*pY[SubWidthC*x][-SubHeightC]
+F[2][1]*pY[SubWidthC*x+1][-SubHeightC]
+F[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[SubWidthC*x-1][-1]
+F[1]*pY[SubWidthC*x][-1]
+F[2]*pY[SubWidthC*x+1][-1]
+2)>>2
- 他の場合:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F5にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[1][0]*pY[-1][-1-SubHeightC]
+F[0][1]*pY[-1][-SubHeightC]
+F[1][1]*pY[0][-SubHeightC]
+F[2][1]*pY[1][-SubHeightC]
+F[1][2]*pY[-1][1-SubHeightC]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[-1][-1]
+F[1]*pY[0][-1]
+F[2]*pY[1][-1]
+2)>>2 (8-182)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[0][-1]
+F[1]*pY[0][-2]
+F[2]*pY[0][-1]
+2)>>2
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1]
- 他の場合に、次が適用される:
- x>0である場合:
- bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0][1]*pY[SubWidthC*x-1][-1]
+F[0][2]*pY[SubWidthC*x-1][-2]
+F[1][1]*pY[SubWidthC*x][-1]
+F[1][2]*pY[SubWidthC*x][-2]
+F[2][1]*pY[SubWidthC*x+1][-1]
+F[2][2]*pY[SubWidthC*x+1][-2]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[SubWidthC*x-1][-1]
+F[1]*pY[SubWidthC*x][-1]
+F[2][1]*pY[SubWidthC*x+1][-1]
+2)>>2
- 他の場合:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0][1]*pY[-1][-1]
+F[0][2]*pY[-1][-2]
+F[1][1]*pY[0][-1]
+F[1][2]*pY[0][-2]
+F[2][1]*pY[1][-1]
+F[2][2]*pY[1][-2]+4)>>3
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、F3にセットされたFについて、次が適用される:
pSelDsY[idx]=
(F[0]*pY[-1][-1]
+F[1]*pY[0][-1]
+F[2]*pY[1][-1]
+2)>>2
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、F2にセットされたFについて、次が適用される:
pSelDsY[idx]=(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1]
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]をpSelComp[0]に等しくセットし、pSelComp[2]をpSelComp[1]に等しくセットし、pSelComp[0]をpSelComp[1]に等しくセットし、pSelComp[1]をpSelComp[3]に等しくセットし、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx[]及びmaxGrpIdx[]は、minGrpIdx[0]=0、minGrpIdx[1]=2、maxGrpIdx[0]=1、maxGrpIdx[1]=3とセットされる。
- pSelDsY[minGrpIdx[0]]>pSelDsY[minGrpIdx[1]]である場合に、Swap(minGrpIdx[0],minGrpIdx[1])。
- pSelDsY[maxGrpIdx[0]]>pSelDsY[maxGrpIdx[1]]である場合に、Swap(maxGrpIdx[0],maxGrpIdx[1])。
- pSelDsY[minGrpIdx[0]]>pSelDsY[maxGrpIdx[1]]である場合に、Swap(minGrpIdx,maxGrpIdx)。
- pSelDsY[minGrpIdx[1]]>pSelDsY[maxGrpIdx[0]]である場合に、Swap(minGrpIdx[1],maxGrpIdx[0])。
- maxY=(pSelDsY[maxGrpIdx[0]]+pSelDsY[maxGrpIdx[1]]+1)>>1。
- maxC=(pSelC[maxGrpIdx[0]]+pSelC[maxGrpIdx[1]]+1)>>1。
- minY=(pSelDsY[minGrpIdx[0]]+pSelDsY[minGrpIdx[1]]+1)>>1。
- minC=(pSelC[minGrpIdx[0]]+pSelC[minGrpIdx[1]]+1)>>1。
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0
a=0
b=1<<(BitDepthC-1)
- そうでない場合に、次が適用される:
diff=maxY-minY
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC
x=Floor(Log2(diff))
normDiff=((diff<<4)>>x)&15
x+=(normDiff!=0)?1:0
y=Floor(Log2(Abs(diffC)))+1
a=(diffC*(divSigTable[normDiff]|8)+2y-1)>>y
k=((3+x-y)<1)?1:3+x-y
a=((3+x-y)<1)?Sign(a)*15:a
b=minC-((a*minY)>>k)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0
a=0
b=minC
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1C(((pDsY[x][y]*a)>>k)+b)
このプロセスへの入力は:
- イントラ予測モードpredModeIntra、
- 現在ピクチャの左上サンプルに対する現在の変換ブロックの左上サンプルのサンプル位置(xTbC,yTbC)、
- 変換ブロックの幅を指定する変数nTbW、
- 変換ブロックの高さを指定する変数nTbH、
- x=-1,y=0..2*nTbH-1及びx=0..2*nTbW-1,y=-1であるクロマ隣接サンプルp[x][y]、である。
このプロセスの出力は、x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]である。
現在のルーマ位置(xTbY,yTbY)は、次のように導出される:
(xTbY,yTbY)=(xTbC<<(SubWidthC-1),yTbC<<(SubHeightC-1)) (346)
変数availL、availT及びavailTLは、次のように導出される:
- 第6.4.4節で規定されている、隣接ブロックの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)、隣接するクロマ位置(xTbC-1,yTbC)、FALSEに等しくセットされたcheckPredModeY、及びcIdxを入力として用いて呼び出され、出力はavailLに割り当てられる。
- 第6.4.4節で規定されている、隣接ブロックの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)m隣接するクロマ位置(xTbC,yTbC-1)、FALSEに等しくセットされたcheckPredModeY、及びcIdxを入力として用いて呼び出され、出力はavailTに割り当てられる。
- 変数availTLは、次のように導出される:
availTL=availL&&availT (347)
- 利用可能な右上隣接クロマサンプルの数numTopRightは、次のように導出される:
- 変数numTopRightは0に等しくセットされ、availTRはTRUEに等しくセットされる。
- predModeIntraがINTRA_T_CCLMに等しいとき、x=nTbW..2*nTbW-1について、availTRがFALSEに等しくなるか又はxが2*nTbW-1に等しくなるまで、次が適用される:
- 第6.4.4節で規定されている、隣接ブロックの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)、隣接するクロマ位置(xTbC+x,yTbC-1)、FALSEに等しくセットされたcheckPredModeY、及びcIdxを入力として用いて呼び出され、出力はavailableTRに割り当てられる。
- availableTRがTRUEに等しいとき、numTopRightは1だけインクリメントされる。
- 利用可能な左下隣接クロマサンプルの数numLeftBelowは、次のように導出される:
- 変数numLeftBelowは0に等しくセットされ、availLBはTRUEに等しくセットされる。
- predModeIntraがINTRA_L_CCLMに等しいとき、y=nTbH..2*nTbH-1について、availLBがFALSEに等しくなるか又はyが2*nTbH-1に等しくなるまで、次が適用される:
- 第6.4.4節で規定されている、隣接ブロックの利用可能性の導出プロセスは、(xTbC,yTbC)に等しくセットされた現在のクロマ位置(xCurr,yCurr)、隣接するクロマ位置(xTbC-1,yTbC+y)、FALSEに等しくセットされたcheckPredModeY、及びcIdxを入力として用いて呼び出され、出力はavailLBに割り当てられる。
- availLBがTRUEに等しいとき、numLeftBelowは1だけインクリメントされる。
上及び右上にある利用可能な隣接クロマサンプルの数numSampT並びに左及び左下にある利用可能な隣接クロマサンプルの数numSampLは、次のように導出される:
- predModeIntraがINTRA_LT_CCLMに等しいとき、次が適用される:
numSampT=availT?nTbW:0 (348)
numSampL=availL?nTbH:0 (349)
- そうでない場合には、次が適用される:
numSampT=(availT&&predModeIntra==INTRA_T_CCLM)?(nTbW+Min(numTopRight,nTbH)):0
(350)
numSampL=(availL&&predModeIntra==INTRA_L_CCLM)?(nTbH+Min(numLeftBelow,nTbW)):0
(351)
変数bCTUboundaryは、次のように導出される:
bCTUboundary=(yTbC&(1<<(CtbLog2SizeY-1)-1)==0)?TRUE:FALSE (352)
NがL及びTで置換される変数cntN及びアレイpickPosNは、次のように導出される:
- 変数numIs4Nは、次のように導出される:
numIs4N=((availT&&availL&&predModeIntra==INTRA LT CCLM)?0:1) (353)
- 変数startPosNは、numSampN>>(2+numIs4N)に等しくセットされる。
変数pickStepNは、Max(1,numSampN>>(1+numIs4N))に等しくセットされる。
- availNがTRUEに等しく、predModeIntraがINTRA_LT_CCLM又はINTRA N CCLMに等しい場合に、次の割り当てが行われる:
- cntNは、Min(numSampN,(1+numIs4N)<<1)に等しくセットされる。
- pickPosN[pos]は、(startPosN+pos*pickStepN)に等しくセットされ、pos=0..(cntN-1)である。
- そうでない場合に、cntNは、0に等しくセットされる。
x=0..nTbW-1,y=0..nTbH-1とする予測サンプルpredSamples[x][y]は、次のように導出される:
- numSampL及びnumSampTの両方が0に等しい場合には、次が適用される:
predSamples[x][y]
=1<<(BitDepthC-1) (354)
- そうでない場合には、次の順序付けられたステップが適用される:
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=pY[x][y] (355)
- そうでない場合に、次が適用される:
- 1次元フィルタ係数アレイF1及びF2、並びに2次元フィルタ係数アレイF3及びF4は、次のとおりに定められる。
F1[0]=2,F1[1]=0 (356)
F2[0]=1,F2[1]=2,F2[2]=1 (357)
F3[i][j]=F4[i][j]=0,
ただし、i=0..2,j=0..2 (358)
- SubWidthC及びSubHeightCの両方が2に等しい場合に、次が適用される:
F1[0]=1,F1[1]=1 (359)
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1 (360)
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1
(361)
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
(362)
- その他の場合に、次が適用される:
F3[1][1]=8 (363)
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2
(364)
-sps_chroma_vertical_collocated_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F3[1][0]*pY[SubWidthC*x][SubHeightC*y-1]+F3[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F3[1][1]*pY[SubWidthC*x][SubHeightC*y]+F3[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F3[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3 (365)
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F3[1][0]*pY[0][SubHeightC*y-1]+
F3[0][1]*pY[-1][SubHeightC*y]+
F3[1][1]*pY[0][SubHeightC*y]+
F3[2][1]*pY[1][SubHeightC*y]+
F3[1][2]*pY[0][SubHeightC*y+1]
+4)>>3 (366)
- そうでない場合(availLがFALSEに等しい場合)には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F2[0]*pY[0][SubHeightC*y-1]+
F2[1]*pY[0][SubHeightC*y]+
F2[2]*pY[0][SubHeightC*y+1]
+2)>>2 (367)
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F3[1][0]*pY[SubWidthC*x][-1]+
F3[0][1]*pY[SubWidthC*x-1][0]+
F3[1][1]*pY[SubWidthC*x][0]+
F3[2][1]*pY[SubWidthC*x+1][0]+
F3[1][2]*pY[SubWidthC*x][1]
+4)>>3 (368)
- そうでない場合(availTがFALSEに等しい場合)には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F2[0]*pY[SubWidthC*x-1][0]+
F2[1]*pY[SubWidthC*x][0]+
F2[2]*pY[SubWidthC*x+1][0]
+2)>>2 (369)
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=
(F3[1][0]*pY[0][-1]+
F3[0][1]*pY[-1][0]+
F3[1][1]*pY[0][0]+
F3[2][1]*pY[1][0]+
F3[1][2]*pY[0][1]+4)>>3 (370)
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(F2[0]*pY[-1][0]
+F2[1]*pY[0][0]+F2[2]*pY[1][0]
+2)>>2 (371)
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(F2[0]*pY[0][-1]
+F2[1]*pY[0][0]+F2[2]*pY[0][1]
+2)>>2 (372)
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0] (373)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F4[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F4[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+F4[1][1]*pY[SubWidthC*x][SubHeightC*y]+F4[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+F4[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F4[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3 (374)
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F4[0][1]*pY[-1][SubHeightC*y]+
F4[0][2]*pY[-1][SubHeightC*y+1]+
F4[1][1]*pY[0][SubHeightC*y]+
F4[1][2]*pY[0][SubHeightC*y+1]+
F4[2][1]*pY[1][SubHeightC*y]+
F4[2][2]*pY[1][SubHeightC*y+1]
+4)>>3 (375)
- そうでない場合(availLがFALSEに等しい場合)には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(F1[0]*pY[0][SubHeightC*y]+
F1[1]*pY[0][SubHeightC*y+1]+1)
>>1 (376)
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..cntL-1として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..cntL-1として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[-1][y] (377)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- yが0よりも大きいか、又はavailTLがTRUEに等しい場合に、pSelDsY[idx]は、次のように導出される:
pSelDsY[idx]=(F3[1][0]*pY[-SubWidthC][SubHeightC*y-1]+F3[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F3[1][1]*pY[-SubWidthC][SubHeightC*y]+F3[2][1]*pY[1-SubWidthC][SubHeightC*y]+F3[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3 (378)
- そうでない場合(yが0に等しい場合)に、pSelDsY[idx]は、次のように導出される:
pSelDsY[idx]=
(F2[0]*pY[-1-SubWidthC][0]+
F2[1]*pY[-SubWidthC][0]+
F2[2]*pY[1-SubWidthC][0]
+2)>>2 (379)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F4[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+F4[1][1]*pY[-SubWidthC][SubHeightC*y]+F4[1][2]*pY[-SubWidthC][SubHeightC*y+1]+F4[2][1]*pY[1-SubWidthC][SubHeightC*y]+F4[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3 (380)
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..cntL+cntT-1として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=0..cntL+cntT-1として、次のように定められる:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[x][-1] (381)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- xが0よりも大きい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F3[1][0]*pY[SubWidthC*x][-1-SubHeightC]+F3[0][1]*pY[SubWidthC*x-1][-SubHeightC]+F3[1][1]*pY[SubWidthC*x][-SubHeightC]+F3[2][1]*pY[SubWidthC*x+1][-SubHeightC]+F3[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3 (382)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (383)
- 他の場合(xが0に等しい場合)に、次が適用される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=F3[1][0]*pY[-1][-1-SubHeightC]+F3[0][1]*pY[-1][-SubHeightC]+F3[1][1]*pY[0][-SubHeightC]+F3[2][1]*pY[1][-SubHeightC]+F3[1][2]*pY[-1][1-SubHeightC]+4)>>3 (384)
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、次が適用される:
pSelDsY[idx]=(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)
>>2 (385)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、次が適用される:
pSelDsY[idx]=(F2[0]*pY[0][-1]+
F2[1]*pY[0][-2]+F2[2]*pY[0][-1]+2)
>>2 (386)
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1] (387)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
- xが0よりも大きい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[SubWidthC*x-1][-1]+F4[0][2]*pY[SubWidthC*x-1][-2]+F4[1][1]*pY[SubWidthC*x][-1]+F4[1][2]*pY[SubWidthC*x][-2]+F4[2][1]*pY[SubWidthC*x+1][-1]+F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3 (388)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (389)
- 他の場合(xが0に等しい場合)に、次が適用される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1][-1]+F4[0][2]*pY[-1][-2]+F4[1][1]*pY[0][-1]+F4[1][2]*pY[0][-2]+F4[2][1]*pY[1][-1]+F4[2][2]*pY[1][-2]+4)>>3 (390)
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、次が適用される:
pSelDsY[idx]=(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)
>>2 (391)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F1[1]*pY[0][-2]+
F1[0]*pY[0][-1]+1)>>1 (392)
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1] (393)
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]はpSelComp[0]に等しくセットされ、pSelComp[2]はpSelComp[1]に等しくセットされ、pSelComp[0]はpSelComp[1]に等しくセットされ、pSelComp[1]はpSelComp[3]に等しくセットされ、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx及びmaxGrpIdxは、次のように導出がされる:
minGrpIdx[0]=0 (394)
minGrpIdx[1]=2 (395)
maxGrpIdx[0]=1 (396)
maxGrpIdx[1]=3 (397)
- pSelDsY[minGrpIdx[0]]がpSelDsY[minGrpIdx[1]]よりも大きいとき、minGrpIdx[0]及びminGrpIdx[1]は次のように交換される:
(minGrpIdx[0],minGrpIdx[1])
=Swap(minGrpIdx[0],minGrpIdx[1]) (398)
- pSelDsY[maxGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、maxGrpIdx[0]及びmaxGrpIdx[1]は次のように交換される:
(maxGrpIdx[0],maxGrpIdx[1])
=Swap(maxGrpIdx[0],maxGrpIdx[1]) (399)
- pSelDsY[minGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、アレイminGrpIdx及びmaxGrpIdxは次のように交換される:
(minGrpIdx,maxGrpIdx)
=Swap(minGrpIdx,maxGrpIdx) (400)
- pSelDsY[minGrpIdx[1]]がpSelDsY[maxGrpIdx[0]]よりも大きいとき、minGrpIdx[1]及びmaxGrpIdx[0]は次のように交換される:
(minGrpIdx[1],maxGrpIdx[0])
=Swap(minGrpIdx[1],maxGrpIdx[0]) (401)
-変数minY、maxY、minC及びmaxCは、次のように導出される:
maxY=(pSelDsY[maxGrpIdx[0]]
+pSelDsY[maxGrpIdx[1]]+1)>>1 (402)
maxC=(pSelC[maxGrpIdx[0]]
+pSelC[maxGrpIdx[1]]+1)>>1 (403)
minY=(pSelDsY[minGrpIdx[0]]
+pSelDsY[minGrpIdx[1]]+1)>>1 (404)
minC=(pSelC[minGrpIdx[0]]
+pSelC[minGrpIdx[1]]+1)>>1 (405)
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0 (406)
a=0 (407)
b=1<<(BitDepthC-1) (408)
- そうでない場合に、次が適用される:
diff=maxY-minY (409)
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC (410)
x=Floor(Log2(diff)) (411)
normDiff=((diff<<4)>>x)&15 (412)
x+=(normDiff!=0)?1:0 (413)
y=Floor(Log2(Abs(diffC)))+1 (414)
a=(diffC*(divSigTable[normDiff]|8)
+2y-1)>>y (415)
k=((3+x-y)<1)?1:3+x-y (416)
a=((3+x-y)<1)?Sign(a)*15:a (417)
b=minC-((a*minY)>>k) (418)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
(419)
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0 (420)
a=0 (421)
b=minC (422)
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1(((pDsY[x][y]*a)>>k)+b) (423)
注記-このプロセスは、sps_chroma_vertical_collocated_flagを使用する。しかし、実施を簡単にするために、それはsps_chroma_horizontal_collocated_flagを使用しない。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=pY[x][y] (355)
- そうでない場合に、次が適用される:
- 1次元フィルタ係数アレイF1及びF2、並びに2次元フィルタ係数アレイF3及びF4は、次のとおりに定められる。
F1[0]=4,F1[1]=0 (356)
F2[0]=1,F2[1]=2,F2[2]=1 (357)
F3[i][j]=F4[i][j]=0,
ただし、i=0..2,j=0..2 (358)
- SubWidthC及びSubHeightCの両方が2に等しい場合に、次が適用される:
F1[0]=3,F1[1]=1 (359)
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1 (360)
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1
(361)
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
(362)
- その他の場合に、次が適用される:
F3[1][1]=8 (363)
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2
(364)
-sps_chroma_vertical_collocated_flagが1に等しい場合には、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F3[1][0]*pY[SubWidthC*x][SubHeightC*y-1]+F3[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F3[1][1]*pY[SubWidthC*x][SubHeightC*y]+F3[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F3[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+4)>>3 (365)
- availLがTRUEに等しい場合には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F3[1][0]*pY[0][SubHeightC*y-1]+
F3[0][1]*pY[-1][SubHeightC*y]+
F3[1][1]*pY[0][SubHeightC*y]+
F3[2][1]*pY[1][SubHeightC*y]+
F3[1][2]*pY[0][SubHeightC*y+1]
+4)>>3 (366)
- そうでない場合(availLがFALSEに等しい場合)には、y=1..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F2[0]*pY[0][SubHeightC*y-1]+
F2[1]*pY[0][SubHeightC*y]+
F2[2]*pY[0][SubHeightC*y+1]
+2)>>2 (367)
- availTがTRUEに等しい場合には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F3[1][0]*pY[SubWidthC*x][-1]+
F3[0][1]*pY[SubWidthC*x-1][0]+
F3[1][1]*pY[SubWidthC*x][0]+
F3[2][1]*pY[SubWidthC*x+1][0]+
F3[1][2]*pY[SubWidthC*x][1]
+4)>>3 (368)
- そうでない場合(availTがFALSEに等しい場合)には、x=1..nTbW-1とするpDsY[x][0]は、次のように導出される:
pDsY[x][0]=
(F2[0]*pY[SubWidthC*x-1][0]+
F2[1]*pY[SubWidthC*x][0]+
F2[2]*pY[SubWidthC*x+1][0]
+2)>>2 (369)
- availLがTRUEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=
(F3[1][0]*pY[0][-1]+
F3[0][1]*pY[-1][0]+
F3[1][1]*pY[0][0]+
F3[2][1]*pY[1][0]+
F3[1][2]*pY[0][1]+4)>>3 (370)
- そうではなく、availLがTRUEに等しく、availTがFALSEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(F2[0]*pY[-1][0]
+F2[1]*pY[0][0]+F2[2]*pY[1][0]
+2)>>2 (371)
- そうではなく、availLがFALSEに等しく、availTがTRUEに等しい場合には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=(F2[0]*pY[0][-1]
+F2[1]*pY[0][0]+F2[2]*pY[0][1]
+2)>>2 (372)
- 他の場合(availLがFALSEに等しく、availTがFALSEに等しい場合)には、pDsY[0][0]は、次のように導出される:
pDsY[0][0]=pY[0][0] (373)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)には、次が適用される:
- x=1..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F4[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F4[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+F4[1][1]*pY[SubWidthC*x][SubHeightC*y]+F4[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+F4[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F4[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3 (374)
- availLがTRUEに等しい場合には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=
(F4[0][1]*pY[-1][SubHeightC*y]+
F4[0][2]*pY[-1][SubHeightC*y+1]+
F4[1][1]*pY[0][SubHeightC*y]+
F4[1][2]*pY[0][SubHeightC*y+1]+
F4[2][1]*pY[1][SubHeightC*y]+
F4[2][2]*pY[1][SubHeightC*y+1]
+4)>>3 (375)
- そうでない場合(availLがFALSEに等しい場合)には、y=0..nTbH-1とするpDsY[0][y]は、次のように導出される:
pDsY[0][y]=(F1[0]*pY[0][SubHeightC*y]+
F1[1]*pY[0][SubHeightC*y+1]+2)
>>2 (376)
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..cntL-1として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..cntL-1として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[-1][y] (377)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- yが0よりも大きいか、又はavailTLがTRUEに等しい場合に、pSelDsY[idx]は、次のように導出される:
pSelDsY[idx]=(F3[1][0]*pY[-SubWidthC][SubHeightC*y-1]+F3[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F3[1][1]*pY[-SubWidthC][SubHeightC*y]+F3[2][1]*pY[1-SubWidthC][SubHeightC*y]+F3[1][2]*pY[-SubWidthC][SubHeightC*y+1]+4)>>3 (378)
- そうでない場合(yが0に等しい場合)に、pSelDsY[idx]は、次のように導出される:
pSelDsY[idx]=
(F2[0]*pY[-1-SubWidthC][0]+
F2[1]*pY[-SubWidthC][0]+
F2[2]*pY[1-SubWidthC][0]
+2)>>2 (379)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F4[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+F4[1][1]*pY[-SubWidthC][SubHeightC*y]+F4[1][2]*pY[-SubWidthC][SubHeightC*y+1]+F4[2][1]*pY[1-SubWidthC][SubHeightC*y]+F4[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3 (380)
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..cntL+cntT-1として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=0..cntL+cntT-1として、次のように定められる:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[x][-1] (381)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- xが0よりも大きい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F3[1][0]*pY[SubWidthC*x][-1-SubHeightC]+F3[0][1]*pY[SubWidthC*x-1][-SubHeightC]+F3[1][1]*pY[SubWidthC*x][-SubHeightC]+F3[2][1]*pY[SubWidthC*x+1][-SubHeightC]+F3[1][2]*pY[SubWidthC*x][1-SubHeightC]+4)>>3 (382)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (383)
- 他の場合(xが0に等しい場合)に、次が適用される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=F3[1][0]*pY[-1][-1-SubHeightC]+F3[0][1]*pY[-1][-SubHeightC]+F3[1][1]*pY[0][-SubHeightC]+F3[2][1]*pY[1][-SubHeightC]+F3[1][2]*pY[-1][1-SubHeightC]+4)>>3 (384)
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、次が適用される:
pSelDsY[idx]=(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)
>>2 (385)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合、次が適用される:
pSelDsY[idx]=(F2[0]*pY[0][-1]+
F2[1]*pY[0][-2]+F2[2]*pY[0][-1]+2)
>>2 (386)
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1] (387)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
- xが0よりも大きい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[SubWidthC*x-1][-1]+F4[0][2]*pY[SubWidthC*x-1][-2]+F4[1][1]*pY[SubWidthC*x][-1]+F4[1][2]*pY[SubWidthC*x][-2]+F4[2][1]*pY[SubWidthC*x+1][-1]+F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3 (388)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (389)
- 他の場合(xが0に等しい場合)に、次が適用される:
- availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1][-1]+F4[0][2]*pY[-1][-2]+F4[1][1]*pY[0][-1]+F4[1][2]*pY[0][-2]+F4[2][1]*pY[1][-1]+F4[2][2]*pY[1][-2]+4)>>3 (390)
- そうではなく、availTLがTRUEに等しく、bCTUboundaryがTRUEに等しい場合に、次が適用される:
pSelDsY[idx]=(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)
>>2 (391)
- そうではなく、availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F1[1]*pY[0][-2]+
F1[0]*pY[0][-1]+2)>>2 (392)
- その他の場合(availTLがFALSEに等しく、bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=pY[0][-1] (393)
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]はpSelComp[0]に等しくセットされ、pSelComp[2]はpSelComp[1]に等しくセットされ、pSelComp[0]はpSelComp[1]に等しくセットされ、pSelComp[1]はpSelComp[3]に等しくセットされ、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx及びmaxGrpIdxは、次のように導出がされる:
minGrpIdx[0]=0 (394)
minGrpIdx[1]=2 (395)
maxGrpIdx[0]=1 (396)
maxGrpIdx[1]=3 (397)
- pSelDsY[minGrpIdx[0]]がpSelDsY[minGrpIdx[1]]よりも大きいとき、minGrpIdx[0]及びminGrpIdx[1]は次のように交換される:
(minGrpIdx[0],minGrpIdx[1])
=Swap(minGrpIdx[0],minGrpIdx[1]) (398)
- pSelDsY[maxGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、maxGrpIdx[0]及びmaxGrpIdx[1]は次のように交換される:
(maxGrpIdx[0],maxGrpIdx[1])
=Swap(maxGrpIdx[0],maxGrpIdx[1]) (399)
- pSelDsY[minGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、アレイminGrpIdx及びmaxGrpIdxは次のように交換される:
(minGrpIdx,maxGrpIdx)
=Swap(minGrpIdx,maxGrpIdx) (400)
- pSelDsY[minGrpIdx[1]]がpSelDsY[maxGrpIdx[0]]よりも大きいとき、minGrpIdx[1]及びmaxGrpIdx[0]は次のように交換される:
(minGrpIdx[1],maxGrpIdx[0])
=Swap(minGrpIdx[1],maxGrpIdx[0]) (401)
-変数minY、maxY、minC及びmaxCは、次のように導出される:
maxY=(pSelDsY[maxGrpIdx[0]]
+pSelDsY[maxGrpIdx[1]]+1)>>1 (402)
maxC=(pSelC[maxGrpIdx[0]]
+pSelC[maxGrpIdx[1]]+1)>>1 (403)
minY=(pSelDsY[minGrpIdx[0]]
+pSelDsY[minGrpIdx[1]]+1)>>1 (404)
minC=(pSelC[minGrpIdx[0]]
+pSelC[minGrpIdx[1]]+1)>>1 (405)
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0 (406)
a=0 (407)
b=1<<(BitDepthC-1) (408)
- そうでない場合に、次が適用される:
diff=maxY-minY (409)
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC (410)
x=Floor(Log2(diff)) (411)
normDiff=((diff<<4)>>x)&15 (412)
x+=(normDiff!=0)?1:0 (413)
y=Floor(Log2(Abs(diffC)))+1 (414)
a=(diffC*(divSigTable[normDiff]|8)
+2y-1)>>y (415)
k=((3+x-y)<1)?1:3+x-y (416)
a=((3+x-y)<1)?Sign(a)*15:a (417)
b=minC-((a*minY)>>k) (418)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
(419)
-そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0 (420)
a=0 (421)
b=minC (422)
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1(((pDsY[x][y]*a)>>k)+b) (423)
注記-このプロセスは、sps_chroma_vertical_collocated_flagを使用する。しかし、実施を簡単にするために、それはsps_chroma_horizontal_collocated_flagを使用しない。
1.x=0..nTbW*SubWidthC-1,y=0..nTbH*SubHeightC-1とする同一位置にあるルーマサンプルpY[x][y]が、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
2.隣接するルーマサンプルpY[x][y]は、次のように導出される:
- numSampLが0よりも大きいとき、x=-1..-3,y=0..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- numSampTが0よりも大きいとき、x=0..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTLがTRUEに等しいとき、x=-1,y=-1,-2である隣接する左上ルーマサンプルpY[x][y]は、位置(xTbY+x,yTbY+y)でのデブロッキングフィルタプロセスより前に、再構成されたルーマサンプルに等しくセットされる。
- availTがFALSEに等しいとき、x=-1..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]は、ルーマサンプルpY[x][0]に等しくセットされる。
- availLがFALSEに等しいとき、x=-1,-2,-3,y=-1..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]は、ルーマサンプルpY[0][y]に等しくセットされる。
3.x=0..nTbW-1,y=0..nTbH-1である、ダウンサンプリングされた同一位置にあるルーマサンプルpDsY[x][y]は、次のように導出される:
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
- x=1..nTbW-1,y=1..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=pY[x][y] (355)
- そうでない場合に、次が適用される:
- 1次元フィルタ係数アレイF1及びF2、並びに2次元フィルタ係数アレイF3及びF4は、次のとおりに定められる:
F2[0]=1,F2[1]=2,F2[2]=1 (357)
F3[i][j]=F4[i][j]=0,
ただし、i=0..2,j=0..2 (358)
- SubWidthC及びSubHeightCの両方が2に等しい場合に、次が適用される:
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1 (360)
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1
(361)
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
(362)
- その他の場合に、次が適用される:
F3[1][1]=8 (363)
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2
(364)
- sps_chroma_vertical_collocated_flagが1に等しい場合には、次が適用される:
- x=0..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=
(F3[1][0]*pY[SubWidthC*x][SubHeightC*y-1]
+F3[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F3[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F3[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F3[1][2]*pY[SubWidthC*x][SubHeightC*y+1]
+4)>>3 (365)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)には、次が適用される:
- x=0..nTbW-1,y=0..nTbH-1とするpDsY[x][y]は、次のように導出される:
pDsY[x][y]=(F4[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F4[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+F4[1][1]*pY[SubWidthC*x][SubHeightC*y]+F4[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+F4[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F4[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3 (374)
4.numSampLが0よりも大きいとき、選択された隣接する左クロマサンプルpSelC[idx]は、idx=0..cntL-1として、p[-1][pickPosL[idx]]に等しくセットされ、選択されたダウンサンプリングされた隣接する左ルーマサンプルpSelDsY[idx]は、idx=0..cntL-1として、次のように導出される:
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[-1][y] (377)
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
pSelDsY[idx]=
(F3[1][0]*pY[-SubWidthC][SubHeightC*y-1]
+F3[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F3[1][1]*pY[-SubWidthC][SubHeightC*y]
+F3[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F3[1][2]*pY[-SubWidthC][SubHeightC*y+1]
+4)>>3 (378)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F4[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+F4[1][1]*pY[-SubWidthC][SubHeightC*y]+F4[1][2]*pY[-SubWidthC][SubHeightC*y+1]+F4[2][1]*pY[1-SubWidthC][SubHeightC*y]+F4[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3 (380)
5.numSampTが0よりも大きいとき、選択された隣接する上クロマサンプルpSelC[idx]は、idx=cntL..cntL+cntT-1として、p[pickPosT[idx-cntL]][-1]に等しくセットされ、ダウンサンプリングされた隣接する上ルーマサンプルpSelDsY[idx]は、idx=0..cntL+cntT-1として、次のように定められる:
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[x][-1] (381)
- そうでない場合に、次が適用される:
-sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=
(F3[1][0]*pY[SubWidthC*x][-1-SubHeightC]
+F3[0][1]*pY[SubWidthC*x-1][-SubHeightC]
+F3[1][1]*pY[SubWidthC*x][-SubHeightC]
+F3[2][1]*pY[SubWidthC*x+1][-SubHeightC]
+F3[1][2]*pY[SubWidthC*x][1-SubHeightC]
+4)>>3 (382)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (383)
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[SubWidthC*x-1][-1]+F4[0][2]*pY[SubWidthC*x-1][-2]+F4[1][1]*pY[SubWidthC*x][-1]+F4[1][2]*pY[SubWidthC*x][-2]+F4[2][1]*pY[SubWidthC*x+1][-1]+F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3 (388)
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]
+2)>>2 (389)
6.cntT+cntLが0に等しくないとき、変数minY、maxY、minC及びmaxCは、次のように導出される:
- cntT+cntLが2に等しいとき、pSelComp[3]はpSelComp[0]に等しくセットされ、pSelComp[2]はpSelComp[1]に等しくセットされ、pSelComp[0]はpSelComp[1]に等しくセットされ、pSelComp[1]はpSelComp[3]に等しくセットされ、ただし、CompはDsY及びCで置換される。
- アレイminGrpIdx及びmaxGrpIdxは、次のように導出がされる:
minGrpIdx[0]=0 (394)
minGrpIdx[1]=2 (395)
maxGrpIdx[0]=1 (396)
maxGrpIdx[1]=3 (397)
- pSelDsY[minGrpIdx[0]]がpSelDsY[minGrpIdx[1]]よりも大きいとき、minGrpIdx[0]及びminGrpIdx[1]は次のように交換される:
(minGrpIdx[0],minGrpIdx[1])
=Swap(minGrpIdx[0],minGrpIdx[1]) (398)
- pSelDsY[maxGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、maxGrpIdx[0]及びmaxGrpIdx[1]は次のように交換される:
(maxGrpIdx[0],maxGrpIdx[1])
=Swap(maxGrpIdx[0],maxGrpIdx[1]) (399)
- pSelDsY[minGrpIdx[0]]がpSelDsY[maxGrpIdx[1]]よりも大きいとき、アレイminGrpIdx及びmaxGrpIdxは次のように交換される:
(minGrpIdx,maxGrpIdx)
=Swap(minGrpIdx,maxGrpIdx) (400)
- pSelDsY[minGrpIdx[1]]がpSelDsY[maxGrpIdx[0]]よりも大きいとき、minGrpIdx[1]及びmaxGrpIdx[0]は次のように交換される:
(minGrpIdx[1],maxGrpIdx[0])
=Swap(minGrpIdx[1],maxGrpIdx[0]) (401)
- 変数minY、maxY、minC及びmaxCは、次のように導出される:
maxY=(pSelDsY[maxGrpIdx[0]]
+pSelDsY[maxGrpIdx[1]]+1)>>1 (402)
maxC=(pSelC[maxGrpIdx[0]]
+pSelC[maxGrpIdx[1]]+1)>>1 (403)
minY=(pSelDsY[minGrpIdx[0]]
+pSelDsY[minGrpIdx[1]]+1)>>1 (404)
minC=(pSelC[minGrpIdx[0]]
+pSelC[minGrpIdx[1]]+1)>>1 (405)
7.変数a、b、及びkは、次のように導出される:
- numSampLが0に等しく、numSampTが0に等しい場合に、次が適用される:
k=0 (406)
a=0 (407)
b=1<<(BitDepthC-1) (408)
- そうでない場合に、次が適用される:
diff=maxY-minY (409)
- diffが0に等しくない場合に、次が適用される:
diffC=maxC-minC (410)
x=Floor(Log2(diff)) (411)
normDiff=((diff<<4)>>x)&15 (412)
x+=(normDiff!=0)?1:0 (413)
y=Floor(Log2(Abs(diffC)))+1 (414)
a=(diffC*(divSigTable[normDiff]|8)
+2y-1)>>y (415)
k=((3+x-y)<1)?1:3+x-y (416)
a=((3+x-y)<1)?Sign(a)*15:a (417)
b=minC-((a*minY)>>k) (418)
ここで、divSigTable[]は、次のとおりに定められる:
divSigTable[]
={0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0}
(419)
- そうでない場合(diffが0に等しい場合)に、次が適用される:
k=0 (420)
a=0 (421)
b=minC (422)
8.x=0..nTbW-1,y=0..nTbH-1である予測サンプルpredSamples[x][y]は、次のように導出される:
predSamples[x][y]
=Clip1(((pDsY[x][y]*a)>>k)+b) (423)
注記-このプロセスは、sps_chroma_vertical_collocated_flagを使用する。しかし、実施を簡単にするために、それはsps_chroma_horizontal_collocated_flagを使用しない。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pDsY[x][y]=pY[x][y]
- そうでない場合に、次が適用される:
- 1次元フィルタ係数アレイF2は、次のとおりに定められる:
F2[0]=1,F2[1]=2,F2[2]=1
- さもなければ、2次元フィルタ係数アレイF3及びF4は、次のとおりに定められる。
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
- sps_chroma_vertical_collocated_flagが1に等しい場合には、次が適用される:
pDsY[x][y]=
(F3[1][0]*pY[SubWidthC*x][SubHeightC*y-1]
+F3[0][1]*pY[SubWidthC*x-1][SubHeightC*y]
+F3[1][1]*pY[SubWidthC*x][SubHeightC*y]
+F3[2][1]*pY[SubWidthC*x+1][SubHeightC*y]
+F3[1][2]*pY[SubWidthC*x][SubHeightC*y+1]
+4)>>3
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)には、次が適用される:
pDsY[x][y]=(F4[0][1]*pY[SubWidthC*x-1][SubHeightC*y]+F4[0][2]*pY[SubWidthC*x-1][SubHeightC*y+1]+F4[1][1]*pY[SubWidthC*x][SubHeightC*y]+F4[1][2]*pY[SubWidthC*x][SubHeightC*y+1]+F4[2][1]*pY[SubWidthC*x+1][SubHeightC*y]+F4[2][2]*pY[SubWidthC*x+1][SubHeightC*y+1]+4)>>3
- 変数yは、pickPosL[idx]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[-1][y]
- そうでない場合に、次が適用される:
- sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
pSelDsY[idx]=
(F3[1][0]*pY[-SubWidthC][SubHeightC*y-1]
+F3[0][1]*pY[-1-SubWidthC][SubHeightC*y]
+F3[1][1]*pY[-SubWidthC][SubHeightC*y]
+F3[2][1]*pY[1-SubWidthC][SubHeightC*y]
+F3[1][2]*pY[-SubWidthC][SubHeightC*y+1]
+4)>>3
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
pSelDsY[idx]=(F4[0][1]*pY[-1-SubWidthC][SubHeightC*y]+F4[0][2]*pY[-1-SubWidthC][SubHeightC*y+1]+F4[1][1]*pY[-SubWidthC][SubHeightC*y]+F4[1][2]*pY[-SubWidthC][SubHeightC*y+1]+F4[2][1]*pY[1-SubWidthC][SubHeightC*y]+F4[2][2]*pY[1-SubWidthC][SubHeightC*y+1]+4)>>3
- 変数xは、pickPosT[idx-cntL]に等しくセットされる。
- SubWidthC及びSubHeightCの両方が1に等しい場合に、次が適用される:
pSelDsY[idx]=pY[x][-1]
- そうでない場合に、次が適用される:
-sps_chroma_vertical_collocated_flagが1に等しい場合に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=
(F3[1][0]*pY[SubWidthC*x][-1-SubHeightC]
+F3[0][1]*pY[SubWidthC*x-1][-SubHeightC]
+F3[1][1]*pY[SubWidthC*x][-SubHeightC]
+F3[2][1]*pY[SubWidthC*x+1][-SubHeightC]
+F3[1][2]*pY[SubWidthC*x][1-SubHeightC]
+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]+2)>>2
- 他の場合(sps_chroma_vertical_collocated_flagが0に等しい場合)に、次が適用される:
- bCTUboundaryがFALSEに等しい場合に、次が適用される:
pSelDsY[idx]=
(F4[0][1]*pY[SubWidthC*x-1][-1]+
F4[0][2]*pY[SubWidthC*x-1][-2]+
F4[1][1]*pY[SubWidthC*x][-1]+
F4[1][2]*pY[SubWidthC*x][-2]+
F4[2][1]*pY[SubWidthC*x+1][-1]+
F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3
- そうでない場合(bCTUboundaryがTRUEに等しい場合)に、次が適用される:
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]+2)>>2
- ビットストリームから第1シンタックス要素をパースするよう構成されるパーシングユニット1501。上述されたように、例えば、第1シンタックス要素は、SPSパラメータに含まれるsps_cclm_colocated_chroma_flagである。
実施形態1.線形モデルを使用するイントラ予測の方法であって、
現在ブロックが属するピクチャのクロマフォーマットに基づき、前記現在ブロックのルーマ成分に対するフィルタを決定することと、
前記現在ブロックの前記ルーマ成分の再構成されたルーマサンプルと、前記現在ブロックの前記ルーマ成分に隣接する選択された位置(現在ブロックの左又は上側に隣接する1つ又は複数の行/列)にあるルーマサンプルとのエリアに、前記決定されたフィルタを適用して、フィルタ処理された再構成されたルーマサンプル(例えば、現在ブロック内のフィルタ処理された再構成されたルーマサンプル(例えば、現在ブロックのルーマ成分))を取得することと、
線形モデル導出の入力として、前記フィルタ処理された再構成されたルーマサンプルに基づいて(例えば、ルーマサンプルの組は、現在ブロック内のフィルタ処理された再構成されたルーマサンプルと、現在ブロックの外にあるフィルタ処理された隣接ルーマサンプルとを含み、例えば、決定されたフィルタは、現在ブロックの外にある隣接ルーマサンプルにも適用されてよい)、線形モデル係数を取得することと、
取得された線形モデル係数と、前記現在ブロックの前記フィルタ処理された再構成されたルーマサンプル(例えば、現在ブロック内のフィルタ処理された再構成されたルーマサンプル(例えば、現在ブロックのルーマ成分))とに基づいて、交差成分予測を実行して、現在クロマブロックの予測子を取得することと
を有する方法。
前記フィルタを、前記現在ブロック内のルーマサンプルの位置及び前記クロマフォーマットに基づき決定すること、又は
前記現在ブロックに属する複数のルーマサンプルに対する各々のフィルタを、前記現在ブロック内のルーマサンプルの各々の位置及び前記クロマフォーマットに基づき決定すること
を有する、方法。
次の:
サブサンプリング比情報(例えば、現在ブロックが属するピクチャのクロマフォーマットに従ってテーブルから取得され得るSubWidthC及びSubHeightC)、
前記現在ブロックが属するピクチャのクロマフォーマット(例えば、クロマフォーマットは、サブサンプリング比情報(例えば、SubWidthC及びSubHeightC)を取得するために使用される)、
前記現在ブロック内のルーマサンプルの位置、
前記現在ブロックに属するルーマサンプルの数、
前記現在ブロックの幅及び高さ、及び/又は
前記現在ブロック内のルーマサンプルに対するサブサンプリングされたクロマサンプルの位置
のうちの1つ以上に基づき前記フィルタを決定することを有する、方法。
前記サブサンプリングされたクロマサンプルが対応するルーマサンプルと同一位置にある場合に、複数のフィルタとサブサンプリング比情報(例えば、SubWidthC及びSubHeightC、すなわち、例えば、現在ブロックの幅及び高さの値)との間の第2又は第3の予め設定された関係(例えば、表2又は表3のどちらか)が、前記フィルタの決定に使用される、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F3,F5,F6}の組について、次が適用される:
F3[0]=1,F3[1]=2,F3[2]=1
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,F2[1]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,F2[1]=0
である、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F1,F2,F3}の組について、次が適用される:
F1[0]=2,F1[1]=0
F2[0]=1,F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F1[0]=1,F1[1]=1,
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F1,F2,F3}の組について、次が適用される:
F1[0]=4,F1[1]=0
F2[0]=1、F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F1[0]=3,F1[1]=1,
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、
F2[0]=1、F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
(外2)
、係数「4」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する)。
フィルタ処理された再構成されたルーマサンプル(例えば、Rec’L[x,y])からサブサンプリングされる境界ルーマ再構成サンプルを有する、方法。
predc(i,j)=α・recL’(i,j)+β
に基づき取得され、predc(i,j)は、クロマサンプルを表し、recL(i,j)は、対応する再構成されたルーマサンプル(例えば、対応する再構成されたルーマサンプルの位置は現在ブロックの中にある)を表す、方法。
線形モデル(例えば、交差成分線形モデル,CCLM、又は多方向線形モデル,MDLM)を用いてイントラ予測を実行することと、
複数のシンタックス要素を含むビットストリームを生成することと
を有し、
前記複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素を含む(例えば、CCLMのルーマフィルタの選択、特に、sps_cclm_colocated_chroma_flagのようなSPSフラグ)、方法。
前記シンタックス要素の値が0又はFALSEであるとき、前記フィルタは、前記線形モデルの決定及び前記予測のためにルーマサンプルに適用される、方法。
ビットストリームから複数のシンタックス要素をパースすることであり、前記複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素を含む(例えば、CCLMのルーマフィルタの選択、特に、sps_cclm_colocated_chroma_flagのようなSPSフラグ)、ことと、
指示された線形モデル(例えば、CCLM)を用いてイントラ予測を実行することと
を有する方法。
前記シンタックス要素の値が1又はTRUEであるとき、前記フィルタは、前記線形モデルの決定及び前記予測のためにルーマサンプルに適用されない、方法。
クロマフォーマット情報に基づきダウンサンプリングフィルタの組を決定することであり、前記クロマフォーマット情報は、現在ブロックが属するピクチャのクロマフォーマットを示す、ことと、
前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを、前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって取得することと、
前記選択された隣接ルーマサンプルの前記ダウンサンプリングされたルーマ参照サンプルと、前記ダウンサンプリングされたルーマ参照サンプルに対応するクロマ参照サンプルとに基づき、1つ以上の線形モデル係数を決定することと、
前記線形モデル係数と、全ルーマブロック内の前記再構成されたルーマサンプルの前記ダウンサンプリングされたルーマサンプルとに基づき、前記ルーマブロックに対応するクロマブロックの予測サンプルを取得することと
を有する方法。
前記クロマフォーマット情報に基づきサブサンプリング比情報(例えば、SubWidthC及びSubHeightC)を決定することと、
前記サブサンプリング比情報(例えば、SubWidthC及びSubHeightC)に基づき前記ダウンサンプリングフィルタの組を決定することと
を有する、方法。
前記クロマフォーマットが4:2:0カラーフォーマットである場合に、前記現在ブロックのルーマブロックに使用される第1のダウンサンプリングフィルタの組を決定すること、
前記クロマフォーマットが4:2:2カラーフォーマットである場合に、前記現在ブロックのルーマブロックに使用される第2のダウンサンプリングフィルタの組を決定すること、又は
前記クロマフォーマットが4:4:4カラーフォーマットである場合に、前記現在ブロックのルーマブロックに使用される第3のダウンサンプリングフィルタの組を決定すること
うちの1つ以上を有する、方法。
SubWidthC==2及びSubHeightC==2である場合に、前記現在ブロックのルーマブロックに使用される第1のダウンサンプリングフィルタの組(ダウンサンプリングフィルタ係数の組)を決定すること、
SubWidthC==2及びSubHeightC==1である場合に、前記現在ブロックのルーマブロックに使用される第2のダウンサンプリングフィルタの組(ダウンサンプリングフィルタ係数の組)を決定すること、又は
SubWidthC==1及びSubHeightC==1である場合に、前記現在ブロックのルーマブロックに使用される第3のダウンサンプリングフィルタの組(ダウンサンプリングフィルタ係数の組)を決定すること
のうちの1つ以上を有する、方法。
前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを、前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって取得することは、
再構成されたルーマサンプルの空間エリアに第1ダウンサンプリングフィルタを適用することによって、前記ルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを取得することであり、前記再構成されたルーマサンプルの空間エリアは、前記再構成されたルーマサンプル(ダウンサンプリングされたルーマサンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む、ことと、
再構成されたルーマサンプルの空間エリアに前記第1ダウンサンプリングフィルタを適用することによって、選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルを取得することであり、前記再構成されたルーマサンプルの空間エリアは、前記選択された隣接ルーマサンプル(前記ダウンサンプリングされたルーマ参照サンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む、ことと
を有し、
前記第1ダウンサンプリングフィルタは、前記ダウンサンプリングフィルタの組の中にある、方法。
4:2:0カラーフォーマットが使用される(SubWidthC==2及びSubHeightC==2)場合に、前記第1ダウンサンプリングフィルタは2D非分離可能フィルタである、方法。
(外3)
によって表され、非ゼロ係数が、前記フィルタ処理された再構成されたルーマサンプルの位置に水平方向に隣接する位置にあり、係数「2」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する、方法。
(外4)
によって表され、非ゼロ係数が、前記フィルタ処理された再構成されたルーマサンプルの位置に水平方向及び/又は垂直方向に隣接する位置にあり、係数「4」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する、方法。
前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを、前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって取得することは、
再構成されたルーマサンプルの空間エリアに第2ダウンサンプリングフィルタを適用することによって、前記ルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを取得することであり、前記再構成されたルーマサンプルの空間エリアは、前記再構成されたルーマサンプル(ダウンサンプリングされたルーマサンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む、ことと、
再構成されたルーマサンプルの空間エリアに前記第2ダウンサンプリングフィルタを適用することによって、選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルを取得することであり、前記再構成されたルーマサンプルの空間エリアは、前記選択された隣接ルーマサンプル(前記ダウンサンプリングされたルーマ参照サンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む、ことと
を有し、
前記第2ダウンサンプリングフィルタは、前記ダウンサンプリングフィルタの組の中にある、方法。
4:2:0カラーフォーマットが使用される(SubWidthC==2及びSubHeightC==2)場合に、前記第2ダウンサンプリングフィルタは2D非分離可能フィルタである、方法。
(外5)
によって表され、非ゼロ係数が、前記フィルタ処理された再構成されたルーマサンプルの位置に水平方向に隣接する位置にあり、係数「2」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する、方法。
(外6)
によって表され、非ゼロ係数が、前記フィルタ処理された再構成されたルーマサンプルの位置に水平方向及び/又は垂直方向に隣接する位置にあり、係数「2」を有する中心位置は、前記フィルタ処理された再構成されたルーマサンプルの位置に対応する、方法。
クロマサンプルタイプ2、又は
クロマサンプルタイプ4
のうちのいずれか1つによって表される、方法。
クロマサンプルタイプ0、
クロマサンプルタイプ1、
クロマサンプルタイプ3、又は
クロマサンプルタイプ5
のうちのいずれか1つによって表される、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F3,F5,F6}の組について、次が適用される:
F3[0]=1,F3[1]=2,F3[2]=1
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F5[0][1]=1,F5[1][1]=4,F3[2][1]=1,
F5[1][0]=1,F5[1][2]=1,F6[0][1]=1,
F6[1][1]=2,F6[2][1]=1,F6[0][2]=1,
F6[1][2]=2,F6[2][2]=1,F2[0]=1,F2[1]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F5[0][1]=0,F5[1][1]=8,F3[2][1]=0,
F5[1][0]=0,F5[1][2]=0,F6[0][1]=2,
F6[1][1]=4,F6[2][1]=2,F6[0][2]=0,
F6[1][2]=0,F6[2][2]=0,F2[0]=2,F2[1]=0
である、方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F1,F2,F3}の組について、次が適用される:
F1[0]=2又は4,F1[1]=0
F2[0]=1,F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F1[0]=1又は3,F1[1]=1,
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
pSelDsY[idx]=
(F[0]*pY[-1][-1]
+F[1]*pY[0][-1]
+F[2]*pY[1][-1]
+2)>>2
方法。
pSelDsY[idx]=
(F[0][1]*pY[-1][-1]
+F[0][2]*pY[-1][-2]
+F[1][1]*pY[0][-1]
+F[1][2]*pY[0][-2]
+F[2][1]*pY[1][-1]
+F[2][2]*pY[1][-2]+4)>>3
方法。
pSelDsY[idx]=pY[0][-1]
方法。
pSelDsY[idx]=
(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
方法。
pSelDsY[idx]=
(F4[0][1]*pY[SubWidthC*x-1][-1]+
F4[0][2]*pY[SubWidthC*x-1][-2]+
F4[1][1]*pY[SubWidthC*x][-1]+
F4[1][2]*pY[SubWidthC*x][-2]+
F4[2][1]*pY[SubWidthC*x+1][-1]+
F4[2][2]*pY[SubWidthC*x+1][-2]+4>>3
方法。
pSelDsY[idx]=
(F2[0]*pY[SubWidthC*x-1][-1]+
F2[1]*pY[SubWidthC*x][-1]+
F2[2]*pY[SubWidthC*x+1][-1]+2>>2
方法。
少なくとも第1条件が満足されない(例えば、bCTUboundaryがFALSEに等しい)場合に、次が適用される:
pSelDsY[idx]=
(F4[0][1]*pY[-1][-1]+
F4[0][2]*pY[-1][-2]+
F4[1][1]*pY[0][-1]+
F4[1][2]*pY[0][-2]+
F4[2][1]*pY[1][-1]+
F4[2][2]*pY[1][-2]+4>>3
方法。
pSelDsY[idx]=
(F2[0]*pY[-1][-1]+
F2[1]*pY[0][-1]+
F2[2]*pY[1][-1]+2>>2
方法。
pSelDsY[idx]=
(F1[1]*pY[0][-2]+F1[0]*pY[0][-1]+1)>>1
又は
pSelDsY[idx]=
(F1[1]*pY[0][-2]+F1[0]*pY[0][-1]+2)>>2
方法。
pSelDsY[idx]=pY[0][-1]
方法。
pDsY[0][y]=
(F1[0]*pY[0][SubHeightC*y]+
F1[1]*pY[0][SubHeightC*y+1]+2)>>2
方法。
フィルタ処理されたエリアの位置がブロック境界にあるときにフィルタリングプロセスを調整することを更に有する方法。
第1条件(例えば、SubWidthC==1及びSubHeightC==1のような、仕様で定義された表から取得されるサブサンプリング比情報)が満足されない場合に、フィルタ{F1,F2,F3}の組について、次が適用される:
F2[0]=1,F2[1]=2,F2[2]=1
F3[i][j]=F4[i][j]=0,ただし、i=0..2,j=0..2
第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足される場合に、
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,
F3[1][0]=1,F3[1][2]=1,
F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,
F4[0][2]=1,F4[1][2]=2,F4[2][2]=1
他の場合(例えば、第2条件(例えば、SubWidthC==2及びSubHeightC==2のような、表から取得されるサブサンプリング比情報)が満足されない場合)に、
F3[0][1]=0,F3[1][1]=8,F3[2][1]=0,
F3[1][0]=0,F3[1][2]=0
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2,
F4[0][2]=0,F4[1][2]=0,F4[2][2]=0
である、方法。
availTがFALSEに等しい場合に、x=-1..SubWidthC*numSampT-1,y=-1,-2である隣接する上ルーマサンプルpY[x][y]が、ルーマサンプルpY[x][0]に等しくセットされ、あるいは、
availLがFALSEに等しい場合に、x=-1,-2,-3,y=-1..SubHeightC*numSampL-1である隣接する左ルーマサンプルpY[x][y]が、ルーマサンプルpY[0][y]に等しくセットされる、
ことを有する、方法。
本願で使用される数学演算子は、Cプログラミング言語で使用されているものと類似している。しかし、整数除算及び算術シフト演算の結果は、より厳密に定義され、指数及び実数値除算のような、更なる演算が定義される。番号付け及び計数の規則は、一般的に0から始まり、例えば、「第1」は0番目と等価であり、「第2」は1番目と等価である、など。
以下の算術演算子が、次のように定義される:
x&&y x及びyのブール論理“AND”
x||y x及びyのブール論理“OR”
! ブール論理“NOT”
x?y:z xがTRUEであるか、又は0に等しくない場合には、yの値として評価し、そうでない場合には、zの値として評価する。
以下の関係演算子が、次のように定義される:
> ~よりも大きい
>= ~以上
< ~よりも小さい
<= ~以下
== ~に等しい
!= ~に等しくない。
以下のビット演算子が、次のように定義される:
& ビット単位“AND”。整数引数に作用する場合に、整数値の2の補数表現に作用する。他の引数よりも少ないビットを含む2進引数に作用する場合に、より短い方の引数は、0に等しい更なる有効ビットを加えることによって拡張される。
| ビット単位“OR”。整数引数に作用する場合に、整数値の2の補数表現に作用する。他の引数よりも少ないビットを含む2進引数に作用する場合に、より短い方の引数は、0に等しい更なる有効ビットを加えることによって拡張される。
^ ビット単位“XOR”。整数引数に作用する場合に、整数値の2の補数表現に作用する。他の引数よりも少ないビットを含む2進引数に作用する場合に、より短い方の引数は、0に等しい更なる有効ビットを加えることによって拡張される。
x>>y y個の2進桁によるxの2の補数整数表現の算術右シフト。この関数は、yの非負整数値についてのみ定義される。右シフトの結果として最上位ビット(MSB)へシフトされたビットは、シフト演算の前のxのMSBに等しい値を有する。
x<<y y個の2進桁によるxの2の補数整数表現の算術左シフト。この関数は、yの非負整数値についてのみ定義される。左シフトの結果として最下位ビット(LSB)へシフトされたビットは、0に等しい値を有する。
以下の算術演算子が、次のように定義される:
= 代入演算子
++ インクリメント、すなわち、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)と等価である。
以下の表記は、値の範囲を指定するために使用される:
x=y..z x、y及びzは整数であり、zはyよりも大きいとして、xは、y以上z以下の整数値を呈する。
以下の数学関数が定義される:
Atan(x) 引数xに作用して、出力値がラジアン単位で-π÷2以上π÷2以下の範囲内にある三角関数の逆正接関数
Clip1Y(x)=Clip3(0,(1<<BitDepthY)-1,x)
Clip1C(x)=Clip3(0,(1<<BitDepthC)-1,x)
Floor(x) x以下の最大の整数
Log2(x) xの底2の対数
Log10(x) xの底10の対数
Sqrt(x)=√x
Swap(x,y)=(y,x)
Tan(x) ラジアン単位で引数xに作用する三角関数の正接関数。
式中の優先順位がパラメータの使用によって明示的に示されていない場合に、以下の規則が適用される:
・優先度のより高い演算は、優先度のより低い演算の前に評価される。
・同じ優先度の演算は、左から右に順番に評価される。
テキスト中で、次の形式で数学的に記述されることになる論理演算のステートメント:
if(条件0)
ステートメント0
else if(条件1)
ステートメント1
・・・
else/*残りの条件に関する説明的所見*/
ステートメントn
は、次の様態で記述されてもよい:
・・・次のように/・・・次が適用される:
- 条件0の場合に、ステートメント0
- そうではなく、条件1の場合に、ステートメント1
- ・・・
- 上記以外の場合に(残りの条件に関する説明的所見)、ステートメントn
if(条件0a&&条件0b)
ステートメント0
else if(条件1a||条件1b)
ステートメント1
・・・
else
ステートメントn
は、次の様態で記述されてもよい:
・・・次のように/・・・次が適用される:
- 次の全ての条件が真である場合に、ステートメント0:
- 条件0a
- 条件0b
- そうではない場合に、次の条件の1つ以上が真である場合に、ステートメント1:
- 条件1a
- 条件1b
- ・・・
- 上記以外の場合に、ステートメントn
if(条件0)
ステートメント0
if(条件1)
ステートメント1
は、次の様態で記述されてもよい:
条件0の場合に、ステートメント0
条件1の場合に、ステートメント1
本特許出願は、2019年12月30日付けで出願された米国特許仮出願第62/955,405号、及び2020年1月7日付けで出願された米国特許仮出願第62/958,293号に対する優先権を主張するものであり、これらの各出願は、その全文を参照により本願に援用される。
Claims (48)
- クロマブロック予測方法であって、
ビットストリームから第1シンタックス要素をパースするステップと、
前記第1シンタックス要素に少なくとも基づき現在ブロックのルーマ成分の再構成されたルーマサンプルにフィルタを適用して、前記現在ブロックのフィルタ処理された再構成されたルーマサンプルを取得するステップであり、前記フィルタはフィルタのセットに属し、該フィルタのセットは2つのフィルタのみを含み、前記フィルタは、前記シンタックス要素の値が第1値であるときに第1フィルタであり、又は前記フィルタは、前記シンタックス要素が第2値であるときに第2フィルタである、ステップと、
前記フィルタ処理された再構成されたルーマサンプルに基づき、線形モデル係数を取得するステップと、
前記取得された線形モデル係数及び前記現在ブロックの前記フィルタ処理された再構成されたルーマサンプルに基づき交差成分予測を実行して、前記現在ブロックのクロマ成分の予測値を取得するステップと
を有する方法。 - 前記フィルタのセットは、F3フィルタ及びF4フィルタのみを含み、前記F3フィルタの係数は[1,1,4,1,1]であり、前記F4フィルタの係数は[1,1,2,2,1,1]である、
請求項1に記載の方法。 - 前記第1シンタックス要素は、sps_chroma_vertical_collocated_flagである、
請求項2に記載の方法。 - sps_chroma_vertical_collocated_flagが1に等しいとき、前記F3フィルタが決定され、又はsps_chroma_vertical_collocated_flagが0に等しいとき、前記F4フィルタが決定される、
請求項3に記載の方法。 - 当該方法は、前記ビットストリームをパースして第2シンタックス要素を取得するステップを更に有し、
前記第2シンタックス要素は、現在の復号化に使用されるイントラ予測モードが線形モデルLMモードであることを示すために使用される、
請求項1乃至4のうちいずれか一項に記載の方法。 - 当該方法は、ビデオシーケンス内の現在画像ブロックを復号するために使用され、
前記現在画像ブロックは、最初のルーマブロック及び現在のクロマブロックを含み、前記ビデオシーケンス内の画像は、4:2:0フォーマット又は4:2:2フォーマットにある、
請求項1乃至5のうちいずれか一項に記載の方法。 - ビットストリームから第1シンタックス要素をパースする前記ステップは、
前記ビットストリーム内のシーケンスパラメータセット(SPS)をパースして前記第1シンタックス要素を取得することを有する、
請求項1乃至6のうちいずれか一項に記載の方法。 - 当該方法は、前記現在ブロックに隣接する選択された位置にあるルーマサンプルに前記決定されたフィルタを適用するステップを更に有し、
前記現在ブロックに隣接する選択された位置にある前記ルーマサンプルは、前記現在ブロックの左隣にある1又は複数の列のサンプル及び/又は前記現在ブロックの上隣にある1又は複数の行のサンプルである、
請求項1乃至7のうちいずれか一項に記載の方法。 - 線形モデルを使用したイントラ予測の方法であって、
現在ブロックが属するピクチャのクロマフォーマットに基づき、前記現在ブロックのルーマ成分に対するフィルタを決定するステップと、
前記現在ブロックの前記ルーマ成分の再構成されたルーマサンプル及び/又は前記現在ブロックに隣接する選択された位置にあるルーマサンプルのエリアに前記決定されたフィルタを適用して、フィルタ処理された再構成されたルーマサンプルを取得するステップと、
前記フィルタ処理された再構成されたルーマサンプルに基づき、線形モデル係数を取得するステップと、
前記取得された線形モデル係数及び前記現在ブロックの前記フィルタ処理された再構成されたルーマサンプルに基づき交差成分予測を実行して、前記現在ブロックのクロマ成分の予測値を取得するステップと
を有する方法。 - 前記フィルタは、次の:
SubWidthC==1及びSubHeightC==1を含む第1条件が満足されないとき、前記フィルタがフィルタのセット{F2,F3}に属し:
F2[0]=1,F2[1]=2,F2[2]=1;
F3[i][j]=F4[i][j]=0,ただし、i=0・・2、j=0・・2
SubWidthC==2及びSubHeightC==2を含む第2条件が満足されるとき、前記フィルタがフィルタのセット{F3,F4}に属し:
F3[0][1]=1,F3[1][1]=4,F3[2][1]=1,F3[1][0]=1,F3[1][2]=1,F4[0][1]=1,F4[1][1]=2,F4[2][1]=1,F4[0][2]=1,F4[1][2]=2,F4[2][2]=1;
あるいは、SubWidthC==2及びSubHeightC==2を含む第2条件が満足されないとき、前記フィルタは:
F4[0][1]=2,F4[1][1]=4,F4[2][1]=2
として定義される、
ように条件付きで決定される、
請求項9に記載の方法。 - 前記クロマフォーマットは、YCbCr 4:4:4クロマフォーマット、YCbCr 4:2:0フォーマット、YCbCr 4:2:2フォーマット、又はモノクロを有する、
請求項9又は10に記載の方法。 - シンタックス要素をビットストリームに符号化し、
前記シンタックス要素は、前記現在ブロックに属するルーマサンプルに対するフィルタの選択を示す、
請求項9乃至11のうちいずれか一項に記載の方法。 - 前記シンタックス要素は、sps_chroma_vertical_collocated_flagであり、前記ビットストリーム内のシーケンスパラメータセット(SPS)に含まれる、
請求項12に記載の方法。 - 線形モデルを使用したイントラ予測の方法であって、
現在ブロックが属するピクチャのクロマフォーマットに基づきダウンサンプリングフィルタの組を決定するステップと、
再構成された隣接する上側ルーマサンプルが利用可能でないとき、再構成されたルーマブロックからのパディングによって隣接サンプルの2つの上行を取得するステップと、
前記再構成された隣接する左側ルーマサンプルが利用可能でないとき、再構成されたルーマサンプルからのパディングによって隣接サンプルの3つの左列を取得するステップと、
前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを取得するステップと、
前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを、前記取得された隣接サンプルの2つの上行のうちの選択されたサンプルに適用することによって、上側のダウンサンプリングされたルーマ参照サンプルを取得するステップであり、選択されたサンプルが左上位置(1202)にあるとき、前記各々のダウンサンプリングフィルタは、再構成された隣接サンプルとパディングされた隣接サンプルとの組み合わせに適用される、ステップと、
前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを、前記取得された隣接サンプルの3つの左列のうちの選択されたサンプルに適用することによって、左側のダウンサンプリングされたルーマ参照サンプルを取得するステップと、
上側若しくは左側又は上側及び左側の組み合わせのダウンサンプリングされたルーマ参照サンプルと、該ダウンサンプリングされたルーマ参照サンプルに対応するクロマ参照サンプルとに基づき、1つ以上の線形モデル係数を決定するステップと、
前記線形モデル係数及び前記ルーマブロック内の前記再構成されたルーマサンプルの前記ダウンサンプリングされたルーマサンプルに基づき、前記ルーマブロックに対応するクロマブロックの予測サンプルを取得するステップと
を有する方法。 - 前記線形モデルは、多方向線形モデル(MDLM)であり、前記線形モデル係数は、前記MDLMを取得するために使用される、
請求項14に記載の方法。 - 符号化デバイスによって実装される符号化の方法であって、
線形モデルを使用してイントラ予測を実行するステップと、
複数のシンタックス要素を含むビットストリームを生成するステップと
を有し、
前記複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素を含み、該シンタックス要素は、sps_cclm_colocated_chroma_flagである、
方法。 - 前記シンタックス要素の値が1又は真であるとき、前記フィルタは、前記線形モデルの決定及び前記予測のためにルーマサンプルに適用されず、
前記シンタックス要素の値が0又は偽であるとき、前記フィルタは、前記線形モデルの決定及び前記予測のためにルーマサンプルに適用される、
請求項16に記載の方法。 - 復号化デバイスによって実装される復号化の方法であって、
ビットストリームから複数のシンタックス要素をパースするステップであり、前記複数のシンタックス要素は、ブロックに属するルーマサンプルに対するフィルタの選択を示すシンタックス要素を含み、該シンタックス要素は、sps_cclm_colocated_chroma_flagである、ステップと、
前記シンタックス要素に基づきイントラ予測を実行するステップと
を有する方法。 - 前記シンタックス要素の値が0又は偽であるとき、前記フィルタは、前記線形モデルの決定及び前記予測のためにルーマサンプルに適用され、
前記シンタックス要素の値が1又は真であるとき、前記フィルタは、前記線形モデルの決定及び前記予測のためにルーマサンプルに適用されない、
請求項18に記載の方法。 - 線形モデルを使用してイントラ予測を実行する方法であって、
クロマフォーマット情報に基づきダウンサンプリングフィルタの組を決定するステップであり、前記クロマフォーマット情報は、現在ブロックが属するピクチャのクロマフォーマットを示す、ステップと、
前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって、前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを取得するステップと、
前記選択された隣接ルーマサンプルの前記ダウンサンプリングされたルーマ参照サンプルと、該ダウンサンプリングされたルーマ参照サンプルに対応するクロマ参照サンプルとに基づき、1つ以上の線形モデル係数を決定するステップと、
前記線形モデル係数及び前記ルーマブロック内の前記再構成されたルーマサンプルの前記ダウンサンプリングされたルーマサンプルに基づき、前記ルーマブロックに対応するクロマブロックの予測サンプルを取得するステップと
を有する方法。 - クロマフォーマット情報に基づきダウンサンプリングフィルタの組を決定する前記ステップは、
前記クロマフォーマット情報に基づきサブサンプリング比情報(SubWidthC及びSubHeightC)を決定するステップと、
前記サブサンプリング比情報(SubWidthC及びSubHeightC)に基づき前記ダウンサンプリングフィルタの組を決定するステップと
を有する、
請求項20に記載の方法。 - 現在ブロックが属するピクチャのクロマフォーマットに基づきダウンサンプリングフィルタの組を決定する前記ステップは、次の:
前記クロマフォーマットが4:2:0カラーフォーマットであるとき、前記現在ブロックの前記ルーマブロックに使用されるダウンサンプリングフィルタの第1セットを決定すること;
前記クロマフォーマットが4:2:2カラーフォーマットであるとき、前記現在ブロックのルーマブロックに使用されるダウンサンプリングフィルタの第2セットを決定すること;又は
前記クロマフォーマットが4:4:4カラーフォーマットであるとき、前記現在ブロックのルーマブロックに使用されるダウンサンプリングフィルタの第3セットを決定すること
のうちの1つ以上を有する、
請求項21に記載の方法。 - 前記サブサンプリング比情報(SubWidthC及びSubHeightC)に基づき前記ダウンサンプリングフィルタの組(ダウンサンプリングフィルタ係数のセット)を決定する前記ステップは、次の:
SubWidthC=2及びSubHeightC=2であるとき、前記現在ブロックの前記ルーマブロックに使用されるダウンサンプリングフィルタの第1セット(ダウンサンプリングフィルタ係数のセット)を決定することと;
SubWidthC=2及びSubHeightC=1であるとき、前記現在ブロックのルーマブロックに使用されるダウンサンプリングフィルタの第2セット(ダウンサンプリングフィルタ係数のセット)を決定することと;又は
SubWidthC=1及びSubHeightC=1であるとき、前記現在ブロックのルーマブロックに使用されるダウンサンプリングフィルタの第3セット(ダウンサンプリングフィルタ係数のセット)を決定することと
のうちの1つ以上を有する、
請求項21に記載の方法。 - 前記サブサンプリングされたクロマサンプルが前記現在ブロック内の前記対応するルーマサンプルと同一位置にある場合に、
前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって、前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを取得する前記ステップは、
前記ルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを、前記再構成されたルーマサンプル(前記ダウンサンプリングされたルーマサンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む再構成されたルーマサンプルの空間エリアに第1ダウンサンプリングフィルタを適用することによって、取得することと、
選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルを、前記選択された隣接ルーマサンプル(前記ダウンサンプリングされたルーマサンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む再構成されたルーマサンプルの空間エリアに前記第1ダウンサンプリングフィルタを適用することによって、取得することと
を有し、
前記第1ダウンサンプリングフィルタは、前記ダウンサンプリングフィルタの組の中にある、
請求項20乃至23のうちいずれか一項に記載の方法。 - 前記サブサンプリングされたクロマサンプルが前記現在ブロック内の前記対応するルーマサンプルと同一位置にない場合に、
前記ダウンサンプリングフィルタの組の中の各々のダウンサンプリングフィルタを適用することによって、前記現在ブロックのルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルと、前記ルーマブロックの外にある選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルとを取得する前記ステップは、
前記ルーマブロック内の再構成されたルーマサンプルのダウンサンプリングされたルーマサンプルを、前記再構成されたルーマサンプル(前記ダウンサンプリングされたルーマサンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む再構成されたルーマサンプルの空間エリアに第2ダウンサンプリングフィルタを適用することによって、取得することと、
選択された隣接ルーマサンプルのダウンサンプリングされたルーマ参照サンプルを、前記選択された隣接ルーマサンプル(前記ダウンサンプリングされたルーマサンプル)の位置に水平方向及び/又は垂直方向に隣接する位置にある再構成されたルーマサンプルを含む再構成されたルーマサンプルの空間エリアに前記第2ダウンサンプリングフィルタを適用することによって、取得することと
を有し、
前記第2ダウンサンプリングフィルタは、前記ダウンサンプリングフィルタの組の中にある、
請求項20乃至23のうちいずれか一項に記載の方法。 - 前記クロマフォーマットがYUV 4:2:2であるとき、又はクロマ成分及びルーマ成分が同一位置にあるとき、ルーマ成分からのサンプリングが、前記ルーマブロックの上側に対してオフセットを有して行われる、
請求項20乃至24のうちいずれか一項に記載の方法。 - 左上サンプルが利用可能であり、かつ、クロマフォーマットがYUV 4:2:2として指定されるか、又はブロック境界がCTUライン境界であるとき、[1 2 1]/4フィルタが前記参照サンプルに適用される、
請求項20乃至26のうちいずれか一項に記載の方法。 - ブロック境界がCTUライン境界ではなく、左上サンプルが利用可能であり、かつ、クロマフォーマットがYUV 4:2:0又は垂直クロマサブサンプリングを使用する任意の他のクロマフォーマットとして指定されるとき、[1 2 1;1 2 1]/フィルタが前記参照サンプルに適用される、
請求項20乃至26のうちいずれか一項に記載の方法。 - availTLがTRUEに等しく、bCTUboundaryがFALSEに等しい場合に、F6にセットされたFについて、次の
pSelDsY[idx]=
=(F[0][1]*pY[-1][-1])+
+F[0][2]*pY[-1][-2]+
+F[1][1]*pY[0][-1]+
+F[1][2]*pY[0][-2]+
+F[2][1]*pY[1][-1]+
+F[2][2]*pY[1][-2]+4)>>3
が適用される、
請求項28に記載の方法。 - ブロック境界がCTUライン境界ではなく、左上サンプルが利用可能であり、クロマフォーマットがYUV 4:2:0又は垂直クロマサブサンプリングを使用する任意の他のクロマフォーマットとして指定されるとき、[1 1]/2フィルタが前記参照サンプルに適用される、
請求項20乃至26のうちいずれか一項に記載の方法。 - availTLがFALSEに等しく、bCTUboundaryがFALSEに等しい場合に、F2にセットされたFについて、次の
pSelDsY[idx]=(F[1]*pY[0][-2]+F[0]*pY[0][-1]+1)>>1
が適用される、
請求項30に記載の方法。 - 少なくとも、bCTUboundaryがFALSEに等しい場合に、次の
pSelDsY[idx]=(F4[0][1]*pY[SubWidthC x-1][-1]+F4[0][2]*pY[SubWidthC*x-1][-2]+F4[1][1]*pY[SubWidthC*x][-1]+F4[1][2]*pY[SubWidthC*x][-2]+F4[2][1]*pY[SubWidthC*x+1][-1]+F4[2][2]*pY[SubWidthC*x+1][-2]+4)>>3
が適用される、
請求項20乃至26のうちいずれか一項に記載の方法。 - 少なくとも、bCTUboundaryがTRUEに等しい場合に、次の
pSelDsY[idx]=(F2[0]*pY[SubWidthC*x-1][-1]+F2[1]*pY[SubWidthC*x][-1]+F2[2]*pY[SubWidthC*x+1][-1]+2)>>2
が適用される、
請求項20乃至26のうちいずれか一項に記載の方法。 - 少なくとも、bCTUboundaryがFALSEに等しく、availTLがTRUEに等しい場合に、次の
pSelDsY[idx]=(F4[0][1]*pY[-1][-1]+F4[0][2]*pY[-1][-2]+F4[1][1]*pY[0][-1]+F4[1][2]*pY[0][-2]+F4[2][1]*pY[1][-1]+F4[2][2]*pY[1][-2]+4)>>3
が適用される、
請求項20乃至26のうちいずれか一項に記載の方法。 - 少なくとも、bCTUboundaryがTRUEに等しく、availTLがTRUEに等しい場合に、次の
pSelDsY[idx]=(F2[0]*pY[-1][-1]+F2[1]*pY[0][-1]+F2[2]*pY[1][-1]+2)>>2
が適用される、
請求項20乃至26のうちいずれか一項に記載の方法。 - 少なくとも、bCTUboundaryがFALSEに等しく、availTLがFALSEに等しい場合に、次の
pSelDsY[idx]=(F1[1]*pY[0][-2]+F1[0]*pY[0][-1]+1)>>1、又は
pSelDsY[idx]=(F1[1]*pY[0][-2]+F1[0]*pY[0][-1]+2)>>2
が適用される、
請求項20乃至26のうちいずれか一項に記載の方法。 - 再構成されたルーマブロックの境界に対するフィルタ選択を実装するためにパディング動作が使用される、
請求項20乃至36のうちいずれか一項に記載の方法。 - 当該方法は、
前記フィルタ処理されたエリアの位置が前記ブロック境界にあるときに前記フィルタリングプロセスを調整することを更に有する、
請求項20乃至37のうちいずれか一項に記載の方法。 - フィルタ係数は位置に依存する、
請求項20乃至38のうちいずれか一項に記載の方法。 - 左側が利用可能でないとき、前記左側のサンプルは、前記再構成されたブロックの最左の再構成されたサンプルを水平方向にコピーすることによって取得される、
請求項39に記載の方法。 - 上側が利用可能でないとき、前記上側のサンプルは、前記再構成されたブロックの最上の再構成されたサンプルを垂直方向にコピーすることによって取得される、
請求項39に記載の方法。 - 前記パディング動作は、
availTがFALSEに等しいとき、x=-1・・SubWidthC*numSampT-1、y=-1,-2で、前記隣接する上ルーマサンプルpY[x][y]は、前記ルーマサンプルpY[x][0]に等しくセットされ、あるいは、
availLがFALSEに等しいとき、x=-1,-2,-3、y=-1・・SubHeightC*numSampL-1で、前記隣接する左ルーマサンプルpY[x][y]は、前記ルーマサンプルpY[0][y]に等しくセットされる
ことを有する、請求項37に記載の方法。 - 請求項9乃至15、16乃至17、及び20乃至42のうちいずれか一項に記載の方法を実行する処理回路を有するエンコーダ(20)。
- 請求項1乃至15、18乃至19、及び20乃至42のうちいずれか一項に記載の方法を実行する処理回路を有するデコーダ(30)。
- 請求項1乃至42のうちいずれか一項に記載の方法を実行するプログラムコードを有するコンピュータプログラム製品。
- コンピュータデバイスによって実行される場合に、前記コンピュータデバイスに、請求項1乃至42のうちいずれか一項に記載の方法を実行させるプログラムコードを担持する非一時的なコンピュータ可読媒体。
- デコーダであって、
1つ以上のプロセッサと、
前記プロセッサへ結合され、前記プロセッサによって実行されるプログラミングを記憶している非一時的なコンピュータ可読記憶媒体と
を有し、
前記プログラミングは、前記プロセッサによって実行される場合に、請求項1乃至15、18乃至19、及び20乃至42のうちいずれか一項に記載の方法を実行するように当該デコーダを構成する、
デコーダ。 - エンコーダであって、
1つ以上のプロセッサと、
前記プロセッサへ結合され、前記プロセッサによって実行されるプログラミングを記憶している非一時的なコンピュータ可読記憶媒体と
を有し、
前記プログラミングは、前記プロセッサによって実行される場合に、請求項9乃至15、16乃至17、及び20乃至42のうちいずれか一項に記載の方法を実行するように当該エンコーダを構成する、
エンコーダ。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962955405P | 2019-12-30 | 2019-12-30 | |
US62/955,405 | 2019-12-30 | ||
US202062958293P | 2020-01-07 | 2020-01-07 | |
US62/958,293 | 2020-01-07 | ||
PCT/RU2020/050403 WO2021045654A2 (en) | 2019-12-30 | 2020-12-30 | Method and apparatus of filtering for cross-component linear model prediction |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2023508571A true JP2023508571A (ja) | 2023-03-02 |
JP7469475B2 JP7469475B2 (ja) | 2024-04-16 |
Family
ID=74853460
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022540495A Active JP7469475B2 (ja) | 2019-12-30 | 2020-12-30 | 交差成分線形モデル予測のためのフィルタリングの方法及び装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US20220345711A1 (ja) |
EP (1) | EP4062637A4 (ja) |
JP (1) | JP7469475B2 (ja) |
KR (1) | KR20220104059A (ja) |
CN (2) | CN114902661A (ja) |
BR (1) | BR112022012484A2 (ja) |
WO (1) | WO2021045654A2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021209065A1 (en) | 2020-04-18 | 2021-10-21 | Beijing Bytedance Network Technology Co., Ltd. | Use restrictions for cross-component prediction |
WO2023230152A1 (en) * | 2022-05-26 | 2023-11-30 | Beijing Dajia Internet Information Technology Co., Ltd | Method and apparatus for cross-component prediction for video coding |
WO2024027566A1 (en) * | 2022-08-02 | 2024-02-08 | Mediatek Inc. | Constraining convolution model coefficient |
CN115834897B (zh) * | 2023-01-28 | 2023-07-25 | 深圳传音控股股份有限公司 | 处理方法、处理设备及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20170150176A1 (en) * | 2015-11-25 | 2017-05-25 | Qualcomm Incorporated | Linear-model prediction with non-square prediction units in video coding |
US10652575B2 (en) * | 2016-09-15 | 2020-05-12 | Qualcomm Incorporated | Linear model chroma intra prediction for video coding |
CN109274969B (zh) * | 2017-07-17 | 2020-12-22 | 华为技术有限公司 | 色度预测的方法和设备 |
JP2021005741A (ja) | 2017-09-14 | 2021-01-14 | シャープ株式会社 | 画像符号化装置及び画像復号装置 |
-
2020
- 2020-12-30 EP EP20861893.4A patent/EP4062637A4/en active Pending
- 2020-12-30 WO PCT/RU2020/050403 patent/WO2021045654A2/en unknown
- 2020-12-30 KR KR1020227023204A patent/KR20220104059A/ko active Search and Examination
- 2020-12-30 BR BR112022012484A patent/BR112022012484A2/pt unknown
- 2020-12-30 CN CN202080089306.2A patent/CN114902661A/zh active Pending
- 2020-12-30 CN CN202210802951.5A patent/CN115665408B/zh active Active
- 2020-12-30 JP JP2022540495A patent/JP7469475B2/ja active Active
-
2022
- 2022-06-24 US US17/849,314 patent/US20220345711A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
CN115665408A (zh) | 2023-01-31 |
BR112022012484A2 (pt) | 2022-09-06 |
JP7469475B2 (ja) | 2024-04-16 |
KR20220104059A (ko) | 2022-07-25 |
US20220345711A1 (en) | 2022-10-27 |
EP4062637A4 (en) | 2023-01-11 |
EP4062637A2 (en) | 2022-09-28 |
WO2021045654A2 (en) | 2021-03-11 |
CN115665408B (zh) | 2024-01-05 |
WO2021045654A9 (en) | 2021-06-17 |
CN114902661A (zh) | 2022-08-12 |
WO2021045654A3 (en) | 2021-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7106744B2 (ja) | ルーマおよびクロマ成分についてibc専用バッファおよびデフォルト値リフレッシュを使用するエンコーダ、デコーダおよび対応する方法 | |
US20220078484A1 (en) | Method and apparatus of cross-component prediction | |
JP2023103292A (ja) | エンコーダ、デコーダ、および対応するイントラ予測方法 | |
JP7332703B2 (ja) | クロマサブブロックのアフィンベースのインター予測のための方法及び装置 | |
JP7275270B2 (ja) | エンコーダ、デコーダ、及びデブロッキングフィルタの境界強度導出の対応する方法 | |
WO2020169113A1 (en) | Method and apparatus for intra prediction using linear model | |
JP7469475B2 (ja) | 交差成分線形モデル予測のためのフィルタリングの方法及び装置 | |
JP7314300B2 (ja) | イントラ予測のための方法および装置 | |
EP3922034A1 (en) | An encoder, a decoder and corresponding methods harmonizing matrix-based intra prediction and secondary transform core selection | |
JP2022541700A (ja) | イントラ予測モードに関連するエンコーダ、デコーダ、および対応する方法 | |
KR20210139446A (ko) | 인트라 스무딩을 위한 방법 및 장치 | |
US20230050376A1 (en) | Method and Apparatus of Sample Fetching and Padding for Downsampling Filtering for Cross-Component Linear Model Prediction | |
US20240121433A1 (en) | Method and apparatus for chroma intra prediction in video coding | |
JP2023100701A (ja) | イントラ予測のためのイントラモードコーディングを使用するエンコーダ、デコーダ、および対応する方法 | |
RU2809841C2 (ru) | Способ и устройство для внутрикадрового предсказания с использованием линейной модели | |
RU2783348C1 (ru) | Кодер, декодер и соответствующие способы получения граничной мощности фильтра деблокинга |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20220721 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220721 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20230829 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20230831 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20231129 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240129 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20240305 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20240404 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7469475 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |