JP2022550998A - 適応ループ・フィルタリングにおける利用可能でないサンプル位置でのパディング・プロセス - Google Patents
適応ループ・フィルタリングにおける利用可能でないサンプル位置でのパディング・プロセス Download PDFInfo
- Publication number
- JP2022550998A JP2022550998A JP2022521190A JP2022521190A JP2022550998A JP 2022550998 A JP2022550998 A JP 2022550998A JP 2022521190 A JP2022521190 A JP 2022521190A JP 2022521190 A JP2022521190 A JP 2022521190A JP 2022550998 A JP2022550998 A JP 2022550998A
- Authority
- JP
- Japan
- Prior art keywords
- samples
- current
- processing unit
- boundaries
- boundary
- 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 974
- 230000008569 process Effects 0.000 title claims description 503
- 238000001914 filtration Methods 0.000 title claims description 465
- 230000003044 adaptive effect Effects 0.000 title claims description 116
- 238000012545 processing Methods 0.000 claims abstract description 481
- 238000006243 chemical reaction Methods 0.000 claims abstract description 68
- 239000011449 brick Substances 0.000 claims description 240
- 230000009466 transformation Effects 0.000 claims description 51
- 230000001131 transforming effect Effects 0.000 claims description 12
- 238000003672 processing method Methods 0.000 abstract description 31
- 239000000523 sample Substances 0.000 description 909
- OSWPMRLSEDHDFF-UHFFFAOYSA-N methyl salicylate Chemical compound COC(=O)C1=CC=CC=C1O OSWPMRLSEDHDFF-UHFFFAOYSA-N 0.000 description 494
- 241000023320 Luma <angiosperm> Species 0.000 description 484
- 238000009795 derivation Methods 0.000 description 94
- 239000000872 buffer Substances 0.000 description 56
- 239000013598 vector Substances 0.000 description 36
- 239000010432 diamond Substances 0.000 description 26
- 238000010586 diagram Methods 0.000 description 24
- 230000011664 signaling Effects 0.000 description 22
- 230000002123 temporal effect Effects 0.000 description 22
- 238000005516 engineering process Methods 0.000 description 21
- 229910003460 diamond Inorganic materials 0.000 description 20
- 238000003860 storage Methods 0.000 description 20
- 238000004590 computer program Methods 0.000 description 18
- 238000013139 quantization Methods 0.000 description 18
- 238000013461 design Methods 0.000 description 14
- 230000006870 function Effects 0.000 description 14
- 230000015654 memory Effects 0.000 description 14
- 230000000694 effects Effects 0.000 description 12
- 230000000007 visual effect Effects 0.000 description 12
- 230000006835 compression Effects 0.000 description 10
- 238000007906 compression Methods 0.000 description 10
- 230000001419 dependent effect Effects 0.000 description 10
- 239000013074 reference sample Substances 0.000 description 10
- 238000010187 selection method Methods 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 8
- 238000005192 partition Methods 0.000 description 6
- 239000007787 solid Substances 0.000 description 6
- 208000037170 Delayed Emergence from Anesthesia Diseases 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 238000000844 transformation Methods 0.000 description 5
- 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
- 238000007792 addition Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000004891 communication 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
- 238000006073 displacement reaction Methods 0.000 description 4
- 238000000605 extraction Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000012856 packing Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 238000013515 script Methods 0.000 description 4
- 230000011218 segmentation Effects 0.000 description 4
- 238000000926 separation method Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000002146 bilateral effect Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 239000003086 colorant Substances 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000013178 mathematical model Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000011045 prefiltration Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000012935 Averaging Methods 0.000 description 1
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/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/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/119—Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
-
- 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/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/174—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 slice, e.g. a line of blocks or a group of blocks
-
- 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/182—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 pixel
-
- 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/80—Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation
- H04N19/82—Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation involving filtering within a prediction loop
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
Description
パリ条約に基づく適用可能な特許法および/または規則のもと、本願は、2019年10月10日に出願された国際特許出願第PCT/CN2019/110489号、2019年10月11日に出願された国際特許出願第PCT/CN2019/110681号、2019年10月14日に出願された国際特許出願第PCT/CN2019/111114号の優先権および利益を適時に主張するために行われる。法のもとでのすべての目的のために、前述の出願の開示全体は、本願の開示の一部として、引用により援用される。
この特許文献は、概括的には、ビデオ符号化および復号技術に向けられる。
7.3.2.3 シーケンスパラメータセットRBSPシンタックス
log2_min_luma_coding_block_size_minus2に2を加えたものは、最小ルーマ・コーディング・ブロック・サイズを指定する。
変数CtbLog2SizeY、CtbSizeY、MinCbLog2SizeY、MinCbSizeY、MinTbLog2SizeY、MaxTbLog2SizeY、MinTbSizeY、MaxTbSizeY、PicWidthInCtbsY、PicHeightInCtbsY、PicSizeInCtbsY、PicWidthInMinCbsY、PicHeightInMinCbsY、PicSizeInMinCbsY、PicSizeInSamplesY、PicWidthInSamplesCおよびPicHeightInSamplesCは、次のように導出される:
テーブル1 境界強度(SPS IBCが無効の場合)
bSidePisLargeBlk=((エッジ・タイプが垂直であり、かつ、p0がCUに属し、幅>=32)||(エッジ・タイプが水平であり、かつ、p0がCUに属し、高さ>=32)) ? TRUE:FALSE
bSideQisLargeBlk=((エッジ・タイプが垂直であり、かつ、q0がCUに属し、幅>=32)||(エッジ・タイプが水平であり、かつ、q0がCUに属し、高さ>=32)) ? TRUE:FALSE
条件1=(bSidePisLargeBlk||bSidePisLargeBlk) ? TRUE:FALSE
ここで、d=dp0+dq0+dp3+dq3である。
双線形フィルタは、境界のいずれか一方の側のサンプルが大きなブロックに属する場合に使用される。大きなブロックに属するサンプルは、垂直エッジについては幅≧32である場合、水平エッジについては高さ≧32である場合として定義される。
クロマ強フィルタは、ブロック境界の両側で使用される。ここで、クロマ・フィルタは、クロマ・エッジの両側が8(クロマ位置)以上であり、3つの条件に関する以下の判定が満たされる場合に選択される:第1の条件は、境界強度と大きなブロックの決定のためのものである。提案されるフィルタは、ブロック・エッジを直交して横切るブロック幅または高さがクロマ・サンプル領域において8以上である場合に適用できる。第2および第3の条件は、基本的にHEVCルーマ・ブロッキング解除決定の場合と同じであり、それぞれオン/オフ決定および強フィルタ決定である。
次いで、dはHEVCルーマ・ブロッキング解除のように導出される。
dpqは、HEVCと同様に導出される。
sq3=Abs(q0-q3), HEVCと同様に導出される
HEVC設計と同様に、StrongFilterCondition=(dpqは(β>>2)より小さく、sp3+sq3は(β>>3)より小さく、Abs(p0-q0)は(5*tC+1)>>1より小さい。
次のクロマについての強いブロッキング解除フィルタが定義される:
位置依存クリッピングtcPDは、境界にある7個、5個および3個のサンプルを修正する強く、長いフィルタに関わるルーマ・フィルタリング・プロセスの出力サンプルに適用される。量子化誤差分布を仮定して、より高い量子化ノイズを有することが期待され、よって、再構成されたサンプル値の、真のサンプル値からの、より高い偏差を有することが期待されるサンプルについて、クリッピング値を増加させることが提案される。
Tc3={3,2,1};
閾値を定義した後、フィルタリングされたp'iおよびq'iのサンプル値は、tcPおよびtcQクリッピング値に従ってクリッピングされる:
p"i=Clip3(p'i+tcPi,p'i-tcPi,p'i);
q"j=Clip3(q'j+tcQj,q'j-tcQj,q'j);
ここで、p'iとq'iはフィルタリングされたサンプル値、p"iとq"jはクリッピング後の出力サンプル値、tcPi はVVC tcパラメータとtcPDとtcQDから導出されたクリッピング閾値である。関数Clip3は、VVCで指定されるクリッピング関数である。
長いフィルタとサブブロック・ブロッキング解除の両方を用いた並列フレンドリーなブロッキング解除を可能にするために、長いフィルタは、長いフィルタのルーマ・コントロールに示されるように、サブブロック・ブロッキング解除(アフィン、ATMVP、DMVR)を使用する側で、高々5つのサンプルで修正するように制限される。さらに、サブブロック・ブロッキング解除は、CUまたは暗黙的なTU境界に近い8×8グリッド上のサブブロック境界が、それぞれの側の高々2つのサンプルを修正するように制限されるように調整される。
SAOの入力は、DB後の再構成されたサンプルである。SAOの概念は、まず、選択された分類器を用いて領域サンプルを複数のカテゴリーに分類し、各カテゴリーについてオフセットを得て、次いで、該オフセットをカテゴリーの各サンプルに加えることによって、領域の平均サンプル歪みを低減することであり、ここで、分類器インデックスおよび領域のオフセットは、ビットストリームにおいて符号化される。HEVCおよびVVCでは、領域(SAOパラメータ信号伝達のための単位)はCTUであると定義されている。
テーブル3:エッジ・オフセットについてのサンプル分類規則
DBの入力は、DBおよびSAO後の再構成されたサンプルである。サンプル分類およびフィルタリング・プロセスは、DBおよびSAO後の再構成されたサンプルに基づく。
いくつかの実施形態では、(図9に示すような)3つまでのダイヤモンド・フィルタ形状が、ルーマ成分について選択できる。ルーマ成分について使用されるフィルタの形状を示すために、インデックスがピクチャー・レベルで信号伝達される。それぞれの四角はサンプルを表し、Ci(iは0~6(左)、0~12(中央)、0~20(右))は、そのサンプルに適用される係数を表す。ピクチャーにおけるクロマ成分については、常に5×5のダイヤモンド形状が使用される。
各ブロックは、25個のクラスのうちの1つにカテゴリー分けされる。分類インデックスCは、その方向性Dと活性
図10は、5×5ダイヤモンド・フィルタ・サポートについての相対的なコーディネーターを示す:左は対角方向、中央は垂直反転、右は回転である。
いくつかの実施形態では、GALFフィルタ・パラメータは、第1のCTUについて、たとえば、スライス・ヘッダの後、第1のCTUのSAOパラメータの前に信号伝達される。ルーマ・フィルタ係数の25個までの集合が信号伝達されることができる。ビット・オーバーヘッドを減らすために、異なる分類のフィルタ係数がマージされることができる。また、参照ピクチャーのGALF係数が記憶され、現在ピクチャーのGALF係数として再利用されることが許容される。現在ピクチャーは、参照ピクチャーについて記憶されているGALF係数を使用し、GALF係数信号伝達をバイパスすることを選択することができる。この場合、参照ピクチャーの1つに対するインデックスのみが信号伝達され、示された参照ピクチャーの記憶されたGALF係数が現在ピクチャーのために継承される。
デコーダ側では、あるブロックについてGALFが有効にされていると、そのブロック内の各サンプルがフィルタリングされ、以下に示されるようなサンプル値R'(i,j)が得られる。ここで、Lはフィルタ長を表し、fm,nはフィルタ係数を表し、f(k,l)はデコードされたフィルタ係数を表す。
2.7.1 例示的なGALF
いくつかの実施形態では、適応ループ・フィルタのフィルタリング・プロセスは、以下のように実行される:
(1)適応フィルタ形状が除去される。ルーマ成分については7×7のフィルタ形状、クロマ成分については5×5のフィルタ形状のみが許容される。
(2)スライス/ピクチャー・レベルからCTUレベルにALFパラメータの信号伝達が除去される。
(3)クラス・インデックスの計算は、2×2ではなく、4×4レベルで実行される。さらに、いくつかの実施形態では、ALF分類のためのサブサンプリングされたラプラシアン計算が利用される。より具体的には、1つのブロック内の各サンプルについて、水平/垂直/45対角/135度の勾配を計算する必要はない。代わりに、1:2サブサンプリングが使用される。
2.8.1 フィルタリング再定式化
式(11)は、符号化効率の影響なしに、次の式で再定式化できる:
ハードウェアおよび組み込みソフトウェアでは、ピクチャー・ベースの処理は、その高いピクチャー・バッファ要件のため、事実上受け入れられない。オンチップ・ピクチャー・バッファの使用は非常に高価であり、オフチップ・ピクチャー・バッファの使用は、外部メモリ・アクセス、電力消費、およびデータ・アクセス・レイテンシーを著しく増加させる。よって、DF、SAO、ALFは、実際の製品ではピクチャー・ベースからLCUベースのデコードへと変更される。LCUベースの処理がDF、SAO、ALFに使用される場合、デコード・プロセス全体は、複数のLCUの並列処理のために、LCUパイプライン式のラスタスキャンでLCUごとにできる。この場合、1つのLCU行を処理するには、上のLCU行からのピクセルが必要となるため、DF、SAO、およびALFのためにラインバッファが必要となる。オフチップ・ラインバッファ(たとえば、DRAM)が使用される場合、外部メモリ帯域幅および電力消費が増加し、オンチップ・ラインバッファ(たとえば、SRAM)が使用される場合、チップ面積が増加する。よって、ラインバッファはすでにピクチャー・バッファよりもはるかに小さいが、ラインバッファを減らすことが望ましい。
・ラインK~N(水平DFピクセル):4ライン
・ラインD~J(SAOフィルタリングされたピクセル):7ライン
・ラインJとラインKの間のSAOエッジ・オフセット分類子値:0.25ライン
したがって、必要なルーマ・ラインの総数は、7+4+0.25=11.25となる。
図15A~15Bは、仮想境界がCTU境界より4ライン上にある場合(N=4)についての修正されたブロック分類を示す。図15Aに示されているように、行Gで始まる4×4ブロックについては、ブロック分類は、ラインEからJまでのみを使用するが、ラインJに属するサンプルについてのラプラシアン勾配計算は、もう1つ下のライン(ラインK)をさらに必要とする。したがって、ラインKはラインJでパディングされる。
図16A~16Cに示されるように、仮想境界に近いラインに属するルーマ・サンプルをフィルタリングするために、フィルタの打ち切りされたバージョンが使用される。図16Aを例に取ると、図13に示されるようにラインMをフィルタリングするとき、たとえば、7×7ダイヤモンド・サポートの中心サンプルはラインMにあり、VB(太線で示される)の上の1つのラインにアクセスする必要がある。この場合、VBより上のサンプルはVBより下の、すぐ下のサンプルからコピーされる。たとえば、実線のP0サンプルが上の破線位置にコピーされる。対称的に、実線のP3サンプルも、すぐ下の破線の位置にコピーされる。たとえその位置のためのサンプルが利用可能であってもである。コピーされたサンプルは、ルーマ・フィルタリング・プロセスにおいてのみ使用される。
非線形ALFがあるCTBについて無効にされている場合、たとえば式(14)のクリッピング・パラメータが(1<<Bitdepth)に等しい場合、パディング・プロセスは、フィルタ係数を修正することによって置き換えることができる(修正係数に基づくALF[modified-coeff based ALF]、MALFとしても知られる)。たとえば、ラインL/I内のサンプルをフィルタリングするとき、フィルタ係数c5はc5'に修正され、この場合、実線のP0Aから破線のP0Aに、および実線のP3Bから破線のP3Bにルーマ・サンプルをコピーする必要はない。図18A。この場合、フィルタリングされるべき現在のサンプルが(x,y)に位置すると仮定すると、両側パディングおよびMALFは同じ結果を生成する。
新たに追加された部分は、太字のイタリック体の下線付きテキストで示される。削除された部分は[[]]を使って示される。
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタ処理され再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・filtIdx[x][y]によって指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]およびルーマ・クリッピング値の配列c[j]は、j=0..11として、次のように導出される:
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうち一つまたは複数が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。〕
・再構成されたサンプル・オフセットr1、r2、およびr3は、水平方向ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
・変数currは次のように導出される:
curr=recPictureL[hx,vy] (8-1188)
・変数sumは次のように導出される:
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマ符号化ツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1230)
ctbHeightC=CtbSizeY/SubHeightC (8-1231)
フィルタ処理された再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマ符号化ツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1、y=0..ctbHeightC-1として、次のようにフィルタリングされる:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・以下の条件のうち一つまたは複数が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。〕
・再構成されたサンプル・オフセットr1、r2は、水平方向ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
・変数currは次のように導出される:
curr=recPictureL[hx,vy] (8-1238)
・クロマ・フィルタ係数の配列f[j]とクロマクリッピング値の配列c[j]は、j=0..5として次のように導出される:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][j]
c[j]=AlfClipC[slice_alf_aps_id_chroma][j]
・変数sumは次のように導出される:
現在のVVC設計によれば、あるCTBの下部境界がスライス/ブリックの下部境界である場合、ALF仮想境界処理方法は無効にされる。たとえば、図19に示されるように、1つのピクチャーが複数のCTUおよび2つのスライスに分割される。
・CTBの下部境界がピクチャーの下部境界である場合(たとえばCTU-D)、上のCTU行からの4ラインと現在のCTUにおける全ラインを含む(M+4)×Mブロックを処理する。
・そうではなく、CTBの下部境界がスライス(またはブリック)の下部境界であり(たとえばCTU-C)、loop_filter_across_slice_enabled_flag(またはloop_filter_across_bricks_enabled_flag)が0に等しい場合、上のCTU行からの4ラインと現在のCTUにおける全ラインを含む(M+4)×Mブロックを処理する。
・そうではなく、スライス/ブリック/タイルにおける最初のCTU行のCTU/CTBの場合(たとえば、CTU-A)、最後の4ラインを除くM×(M-4)ブロックを処理する。
・そうではなく、スライス/ブリック/タイルの最初のCTU行内ではなく(たとえばCTU-B)、スライス/ブリック/タイルの最後のCTU行内ではないCTU/CTBの場合、上のCTU行からの4ラインを含み、現在のCTU内の最後の4ラインを除くM×Mブロックを処理する。
VTM5における水平ラップアラウンド動き補償は、正距円筒図法(ERP)投影フォーマットでの再構成された360度ビデオの視覚的品質を改善するために設計された360固有の符号化ツールである。従来の動き補償では、動きベクトルが参照ピクチャーのピクチャー境界を越えるサンプルを参照する場合、対応するピクチャー境界の最も近い近傍からコピーすることによって境界外サンプルの値を導出するために、反復的なパディングが適用される。360度ビデオでは、この反復的パディング方法は適当ではなく、再構成されたビューポート・ビデオにおいて「シーム・アーチファクト」と呼ばれる視覚的アーチファクトを引き起こす可能性がある。360度ビデオは球面上で捕捉され、本来的に「境界」をもたないため、投影ドメインにおいて参照ピクチャーの境界外にある参照サンプルは、球面ドメインにおいては近傍サンプルから常に得ることができる。一般的な投影フォーマットについては、2D-3D座標変換および3D-2D座標変換、ならびに端数サンプル位置についてのサンプル補間に関わるので、球面ドメインでは対応する近傍サンプルを導出することが難しいことがある。この問題は、ERP投影フォーマットの左と右の境界については、ずっと単純である。なぜなら、左のピクチャー境界の外側の球面近傍は右のピクチャー境界の内側のサンプルから得られ、その逆も同様であるからである。
いくつかの実施形態では、以下の特徴が含まれる。
○(高度な)時間的ルーマ動きベクトル予測のための導出プロセス
○ルーマ・サンプル双線形補間プロセス
○ルーマ・サンプル8タップ補間フィルタリング・プロセス
○クロマ・サンプル補間プロセス。
現在のVVC設計には以下のような問題がある。
a. スライス/ブリック/タイル境界を前もって知らないデコーダ(w.e.低遅延アプリケーション)については、ALFラインバッファが復元される必要がある。ラインバッファ内のコンテンツがALFフィルタリングに使用されるか否かは、現在のCTUがスライス/ブリック/タイル境界CTUでもあるかどうかに依存するが、この情報は、次のスライス/ブリック/タイルがデコードされるまでは不明である。
b. スライス/ブリック/タイル境界を前もって知っているデコーダについては、ALFラインバッファの使用を避けるために、デコーダは、パイプライン・バブルを我慢するか(可能性が非常に低い)、常時64×64 VDPUあたり68ラインの速度でALFを実行する(過剰な備え)必要がある。
a. 一例では、ブロックの下部境界が360度仮想境界であり、ALF仮想境界がこのブロックにも適用される場合、この場合、360度仮想境界のためのパディング方法は、まず、360度仮想境界の下の仮想サンプルを生成するために適用されうる。その後、360度仮想境界の下に位置するこれらの仮想サンプルは、利用可能なものとして扱われる。また、図16A~Cに従って、ALF 両側パディング方法がさらに適用されてもよい。一例が図25に示される。
7.3.2.3 シーケンスパラメータセットRBSP構文
以下のリストは、一般的な概念を説明するための例として考慮されるべきである。リストされた技法は、狭義に解釈されるべきではない。さらに、これらの技法は、任意の仕方で組み合わせることができる。
a. あるいはまた、さらに、この場合、ALF仮想境界処理方法は無効にされてもよい。
a. 一例では、applyVirtualBoundaryは、所与のCTU/CTBサイズについて、たとえばK×Lに等しいCTU/CTBサイズ(たとえば、K=L=4)について常に偽に設定される。
b.一例では、applyVirtualBoundaryは、K×L以下の、またはK×Lより小さいあるCTU/CTBサイズ(たとえば、K=L=8)について常に偽に設定される。
c. あるいはまた、ALFは、4×4、8×8などのある種のCTU/CTBサイズについて無効にされる。
a. 一例では、CTBの下部境界が当該ビデオ単位の境界または仮想境界である場合、符号化ツリー・ブロック(CTB)についてALF仮想境界処理方法が有効にされてもよい(たとえば、applyVirtualBoundaryが真に設定される)。
i. あるいはまた、さらに、下部境界が下部ピクチャー境界でない場合、または下部境界がピクチャー外である場合は、上記の方法が有効にされる。
b. 現在の符号化ツリー・ブロックの下部境界がピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しい場合、ALF仮想境界処理メソッドはやはり有効にされてもよい(たとえば、applyVirtualBoundaryが真に設定される)。
c. 一例では、CTBについてのALF仮想境界処理方法(たとえばapplyVirtualBoundaryの値)を有効にするかどうかは、CTBの下部境界とピクチャーの下部境界の間の関係のみに依存してもよい。
i. 一例では、applyVirtualBoundaryが偽に設定されるのは、CTBの下部境界がCTBを含むピクチャーの下部境界である場合、または下部境界がピクチャーの外側である場合のみである。
ii. 一例では、applyVirtualBoundaryは、CTBの下部境界がCTBを含むピクチャーの下部境界ではない場合に真に設定される。
d. 一例では、図18A~18CにおけるCTU-Cをデコードする場合、M×Mサンプルは、上のCTUからのK個のラインを用い、仮想境界より下のK個のラインを除外してフィルタリングされてもよい。
a. あるいはまた、信号伝達されたloop_filter_across_bricks_enabled_flag/loop_filter_across_slices_enabled_flagは、ALFを除いてブロッキング解除フィルタおよびSAOのフィルタリング・プロセスのみを制御してもよい。
b. 一例では、別のサンプルについてALFを行うために、対応する位置にある再構成されたサンプルの代わりに、仮想サンプルが使用されてもよい。
a. あるいはまた、さらに、ループ内フィルタリングのために境界にあるサンプルを処理するために、仮想境界の方法(たとえば、両側パディング方法)がブロックに適用されてもよい。
b. あるいはまた、さらに、上記の諸方法は、ブロックがビデオ単位の下部境界に位置するサンプルを含む場合に適用されてもよい。
c. 一例では、1つのブロックのK個のラインをデコードする際に、K個のラインがブロックの仮想境界の下であり(たとえば、図17A~17BのCTU-Bにおける最後のK個のライン)、ブロックの下部境界がビデオ単位の下部境界である場合、これらのK個のラインの外の他のサンプルの使用を回避するために、ALF分類/フィルタリング・プロセスにおいて仮想サンプルが生成されてもよく、たとえば、両側パディング方法が適用されてもよい。
i. あるいはまた、それら最後のK行についてALFが無効にされてもよい。
d. 一例では、1つのブロックが複数の境界にある場合、ALF分類のために使用されるピクセル/サンプルは、これらの複数の境界のいずれにもまたがらないように制限されうる。
i. 一例では、あるサンプルについて、そのある近傍サンプルが「利用可能でない」(たとえば、複数の境界のいずれかを横切る)場合、単独で、またはすべての種類の勾配/方向性が、そのサンプルについて計算されないことがある。
1. 一例では、サンプルの勾配は、ゼロとして扱われてもよい。
2. 一例では、サンプルの勾配は、「利用可能でない」として扱われてもよく、ALF分類プロセスで導かれる活性(activity)(たとえば、セクション2.6.1.1の式(8)で定義される)に加えられなくてもよい。
ii. 一例では、ALF分類プロセスで使用される部分的サンプルのみが「利用可能」である場合(たとえば、これらの境界のどれも越えていない場合)、ALF分類プロセスで導かれる活性/方向性は、ある因子によってスケーリングされてもよい。
iii. 一例では、境界ブロックについて、ALF分類プロセスにおいてN個のサンプルについて勾配/方向性が計算される必要があり、M個のサンプルについてのみ勾配を計算することができると仮定する(たとえば、サンプルのある近傍サンプルが「利用可能」でない場合、勾配はそれについて計算できない)。その場合、活性にN/Mを乗算されてもよい。
1. あるいはまたは、N/Mに依存する因子を乗算されてもよい。たとえば、数はMN(Nは整数)であってもよく、たとえば、M=2であってもよい。
e. 一例では、M×N(たとえば、現在の設計ではM=N=8、M列およびN行)窓内の部分サンプルの勾配が、分類のために使用されうる。
i. たとえば、現在のN1*N2(現在の設計ではN1=N2=4)ブロックについては、M*NはN1*N2ブロックを中心としている。
ii. 一例では、いずれかの境界を越えてサンプルにアクセスする必要のないサンプルの勾配が使用されてもよい。
1. あるいはまた、さらに、一つまたは複数の境界に位置するサンプルの勾配を計算する場合、現在のサンプルのいくつかの近傍サンプルが「利用可能でない」ならば、パディング(たとえば、片側パディング(1-side padding))が実行されてもよい。
2. あるいはまた、現在のサンプルがビデオ単位の上部境界(スライス/ブリック/タイル/360度ビデオ仮想境界またはALF仮想境界など)に位置する場合、上のK個の利用可能でないライン(たとえば、K=1,2)がパディングされてもよい。
3. あるいはまた、さらに、現在のサンプルがビデオ単位の左境界に位置する場合、左のK個(たとえば、K=1,2)の利用可能でないカラムがパディングされてもよい。
4. あるいはまた、さらに、現在のサンプルがビデオ単位の右境界に位置する場合、右のK個(たとえば、K=1,2)の利用可能でないカラムがパディングされてもよい。
5. あるいはまた、さらに、現在のサンプルがビデオ単位の底部境界に位置する場合、底部のK個(たとえば、K=1,2)の利用可能でないラインがパディングされてもよい。
6. あるいはまた、さらに、現在のサンプルがビデオ単位の上の境界および左の境界に位置するならば、上のK1個(たとえば、K1=1、2)の利用可能でないラインがまずパディングされてM*(N+K1)窓を生成してもよく、次いで、左のK2個(たとえば、K2=1、2)の利用可能でないカラムがパディングされて(M+K2)*(N+K1)窓を生成してもよい。
a. あるいはまた、左のK2個(たとえば、K2=1,2)の利用可能でないカラムがまずパディングされて、(M+K2)*N窓を生成してもよく、次いで、上のK1個(たとえば、K1=1,2)の利用可能でない行がパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
7. あるいはまた、さらに、現在のサンプルがビデオ単位の上の境界および右の境界に位置するならば、上のK1個(たとえば、K1=1、2)の利用可能でないラインがまずパディングされて、M*(N+K1)窓を生成してもよく、その後、右のK2個(たとえば、K2=1、2)の利用可能でないカラムがパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
a. あるいはまた、右のK2個(たとえば、K2=1,2)の利用可能でない列がまずパディングされて、(M+K2)*N窓を生成してもよく、次いで、上のK1個(たとえば、K1=1,2)の利用可能でない行がパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
8. あるいはまた、さらに、現在のサンプルがビデオ単位の底部境界および右の境界に位置するならば、下部のK1個(たとえば、K1=1、2)の利用可能でないラインがまずパディングされて、M*(N+K1)窓を生成してもよく、次いで、右のK2個(たとえば、K2=1、2)の利用可能でないカラムがパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
a. あるいはまた、右のK2個(たとえば、K2=1,2)の利用可能でない列がまずパディングされて、(M+K2)*N窓を生成してもよく、次いで、下部のK1個(たとえば、K1=1,2)の利用可能でない行がパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
9. あるいはまた、現在のサンプルがビデオ単位の底部境界および左の境界に位置するならば、下部のK1個(たとえば、K1=1、2)の利用可能でないラインがまずパディングされてM*(N+K1)窓を生成してもよく、次いで、左のK2個(たとえば、K2=1、2)の利用可能でないカラムがパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
a. あるいはまた、左のK2個(たとえば、K2=1,2)の利用可能でない列がまずパディングされて、(M+K2)*N窓を生成してもよく、次きで、下部のK1個(たとえば、K1=1,2)の利用可能でない行がパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
10. あるいはまた、さらに、パディングされたサンプルが、勾配を計算するために使用されてもよい。
iii. 一例では、ビデオ単位の上/下の境界(たとえば、スライス/ブリック/タイル/360度ビデオ仮想境界またはALF仮想境界)におけるブロックについて、M*(N-C1)窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の上/下のC1個のラインの勾配は、分類において使用されない。
iv. 一例では、ビデオ単位の左/右境界におけるブロックについて、(M-C1)*N窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の左/右のC1列の勾配は、分類において使用されない。
v. 一例では、ビデオ単位の上部境界および下部境界におけるブロックについて、M*(N-C1-C2)窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の上部のC1行および下部のC2行の勾配は、分類において使用されない。
vi. 一例では、ビデオ単位の上部境界および左の境界におけるブロックについて、(M-C1)*(N-C2)窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の上部のC1行および左のC2列の勾配は、分類において使用されない。
vii. 一例では、ビデオ単位の上部境界および右の境界におけるブロックについて、(M-C1)*(N-C2)窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の上部のC1行および右のC2列の勾配は、分類において使用されない。
viii. 一例では、ビデオ単位の底部境界および左境界におけるブロックについて、(M-C1)*(N-C2)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の下部のC1行および左のC2列の勾配は、分類において使用されない。
ix. 一例では、ビデオ単位の底部境界および右の境界におけるブロックについて、(M-C1)*(N-C2)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の下部のC1行および右のC2列の勾配は、分類において使用されない。
x. 一例では、ビデオ単位の左境界および右境界におけるブロックについて、(M-C1-C2)*N窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の左のC1列および右のC2列の勾配は、分類において使用されない。
xi. 一例では、ビデオ単位の上部境界、下部境界および左境界におけるブロックについて、(M-C3)*(N-C1-C2)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の上部C1行、下部C2行、左C3列の勾配は、分類において使用されない。
xii. 一例では、ビデオ単位の上部境界、下部境界および右境界におけるブロックについて、(M-C3)*(N-C1-C2)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の上部のC1行、下部のC2行および右C3列の勾配は、分類において使用されない。
xiii. 一例では、ビデオ単位の左境界、右境界、および上部境界におけるブロックについて、(M-C1-C2)*(N-C3)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の左のC1列、右のC2列、および上部C3行の勾配は、分類において使用されない。
xiv. 一例では、ビデオ単位の左境界、右境界および下部境界におけるブロックについて、(M-C1-C2)*(N-C3)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の左のC1列、右のC2列および下部のC3行の勾配は、分類において使用されない。
xv. 一例では、ビデオ単位の左境界、右境界、上部境界、および下部境界におけるブロックについて、(M-C1-C2)*(N-C3-C4)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の左のC1列および右のC2列、上部のC3行および下部のC4行の勾配は、分類において使用されない。
xvi. 一例では、C1、C2、C3およびC4は、2に等しい。
xvii. 一例では、勾配計算において必要とされる「利用可能でない」近傍サンプルがないサンプルの勾配が使用されうる。
f. 一例では、1つのラインが複数の境界にある場合(たとえば、ラインから境界までの間の距離が閾値未満)、パディング・プロセスは、それが何個の境界に属しうるかに関係なく、1回だけ実行される。
i. あるいはまた、何個の近傍ラインがパディングされるかは、すべての境界に対する現在のラインの位置に依存する。
ii. たとえば、何個の近傍ラインがパディングされるかは、たとえば現在のラインが2つの境界内にあり、該2つの境界が上および下にある場合、現在のラインと2つの境界との間の距離によって決定されてもよい。
iii. たとえば、何個の近傍ラインがパディングされるかは、たとえば現在のラインが2つの境界内にあり、それら2つの境界が上および下にある場合、現在の行と最も近い境界との間の距離によって決定されてもよい。
iv. たとえば、何個の近傍ラインがパディングされるかは、各境界について独立して計算されてもよく、最大のものが最終的なパディングされるライン数として選択される。
v. 一例では、何個の近傍ラインがパディングされるかは、ラインの各側(たとえば、上側および下側)について決定されてもよい。
vi. 一例では、両側パディング方法について、何個の近傍ラインがパディングされるかは、両側について合同で決定されてもよい。
vii. あるいはまた、さらに、ALFによって使用される両側パディング方法が適用される。
g. 一例では、1つのラインが複数の境界にあり、ラインの各側(たとえば、上側と下側)に少なくとも1つの境界がある場合、ALFはそれについて無効にされてもよい。
h. 一例では、現在のラインによって必要とされるパディングされたラインの数が閾値よりも大きい場合、ALFは現在のラインについて無効にされてもよい。
i. 一例では、任意の側のパディングされたラインの数が閾値よりも大きい場合、ALFは現在のラインについて無効にされてもよい。
ii. 一例では、両側におけるパディングされたラインの合計数が閾値よりも大きい場合、ALFは現在のラインについて無効にされてもよい。
i. あるいはまた、上記の諸方法は、ブロックがビデオ単位の下部境界に位置するサンプルを含み、ALFのようなループ内フィルタリングがブロックについて有効にされている場合に適用されてもよい。
j. あるいはまた、さらに、上記の諸方法は、たとえば、ブロックがビデオ単位の下部境界に位置するサンプルを含み、境界をまたぐフィルタリングが許可されない(たとえば、pps_loop_filter_across_virtual_boundaries_disabled_flag/loop_filter_across_slices_enabled_flag/loop_filter_across_slices_enabled_flagが真である)場合のようなある種の条件下で適用されてもよい。
k. 提案される方法は、垂直境界に位置するサンプル/ブロックにも適用可能である。
a. 一例では、片側パディングのためのライン数は、(M-min(D0,D1))に設定される。
b. 一例では、片側パディングのためのライン数は、(M-max(D0,D1))に設定される。
c. 上記の例については、D0、D1は、現在のラインと上/下の境界との間の距離を示す。
d. 上記の例については、Mは、ALF仮想境界が1つのCTUの底部から何ライン目かを示す。
a. 一例では、異なる仕方の選択は、フィルタリングされるサンプルの位置に依存してもよい。
b. 一例では、ビデオ単位(たとえばCTB)の下部境界におけるサンプルは、それが別のサンプルのためにALFにおいて使用される場合、第1の方法で選択されてもよい。そうでない場合(境界にない場合)、第2の方法が選択される。
a. 一例では、ALF分類プロセスによって必要とされるサンプルがVPDU境界の外側または仮想境界より下にある場合、それは仮想サンプルによって置き換えられてもよく、または、そのサンプルについての分類結果が、利用可能なサンプルからパディングされたものなど、他のサンプルに関連付けられた結果からコピーされてもよい。
b. 一例では、フィルタリング・プロセスによって必要とされるサンプルがVPDU境界の外側または仮想境界より下にある場合、それは、利用可能なサンプルからパディングされたものなど、仮想サンプルによって置き換えられてもよい。
c. 一例では、あるブロックについて、それがVPDUの境界に位置するサンプルを含む場合、そのブロックについてALF仮想境界処理方法が有効にされてもよい(たとえば、applyVirtualBoundaryが真に設定される)。
d. あるいはまた、水平VPDU境界を越えるサンプルの使用は、フィルタリング・プロセスにおいて無効にされてもよい。
i. 一例では、フィルタリング・プロセスによって必要とされるサンプルが水平VPDU境界より下にある、または仮想境界より下にある場合、それは、利用可能なサンプルからパディングされたもののような仮想サンプルによって置き換えられてもよい。
e. あるいはまた、垂直VPDU境界を越えるサンプルの使用は、フィルタリング・プロセスにおいて無効にされてもよい。
i. 一例では、フィルタリング・プロセスによって必要とされるサンプルが垂直VPDU境界の外側、または仮想境界より下にある場合、それは、利用可能なサンプルからパディングされたもののような仮想サンプルによって置き換えられてもよい。
a. あるいはまた、さらに、両側パディングの概念は、すべてのループ内フィルタの前に、再構成されたサンプルからサンプルをパディングすることを介して適用される。
i. 一例では、フィルタ・サポート内のサンプルがすべてのループ内フィルタの前の再構成されたサンプルからである場合、フィルタ・サポート内の対称な(たとえば、原点、たとえば現在のサンプルに関して対称な)サンプルもまた、すべてのループ内フィルタの前の再構成されたサンプルを使用するものとする。
1. フィルタリングされるべき現在のサンプルの座標が(0,0)であり、(i,j)に位置するサンプルがすべてのループ内フィルタの前の再構成されたサンプルであるとすれば、(-i,-j)に位置するサンプルは、すべてのループ内フィルタの前の再構成されたサンプルである。
2. フィルタリングされるべき現在のサンプルの座標が(x,y)であり、(x+i,y+j)に位置するサンプルがすべてのループ内フィルタの前の再構成されたサンプルであるとすれば、(x-i,y-j)に位置するサンプルはすべてのループ内フィルタの前の再構成されたサンプルである。
b. あるいはまた、さらに、ループ内再整形(In-loop reshaping、LMCSとしても知られる)が有効にされる場合、すべてのループ内フィルタ前の再構成されたサンプルは、再整形されたドメインから変換されたもとのドメイン内のものである。
a. 一例では、サンプルが上記の方法においてパディングされる必要があるとする。パディングを実行する代わりに、そのサンプルに関連するフィルタ係数がゼロに設定される。
i. この場合、フィルタ・サポートは、パディングされることを必要とするサンプルを除外することによって修正される。
ii. あるいはまた、さらに、現在のサンプルを除く他のサンプルに適用されるフィルタ係数は不変に保たれるが、現在のサンプルに適用されるフィルタ係数は、((1<<C_BD)-パディングされる必要のないサンプルに適用されるすべてのフィルタ係数の和)のように修正されてもよく、ここで、C_BDはフィルタ係数のビット深さを示す。
1. 図18A~18Bを例に取ると、ラインLおよびIをフィルタリングするとき、現在のサンプルに適用されるフィルタ係数c12は、((1<<C_BD)-2*(c4+c5+c6+c7+c8+c9+c10+c11))に修正される。
b. 一例では、上記の方法においてサンプル(x1,y1)が(x2,y2)からパディングされるとする。パディングを実行する代わりに、非線形フィルタが有効にされているか無効にされているかにかかわらず、(x1,y1)に関連するフィルタ係数が位置(x2,y2)のフィルタ係数に加算される。
i. あるいはまた、(x2,y2)についてのクリッピング・パラメータがオンザフライで導出されてもよい。
1. 一例では、(x2,y2)についてのデコードされたクリッピング・パラメータと等しく設定されてもよい。
2. あるいはまた、(x1,y1)および(x2,y2)についてのデコードされたクリッピング・パラメータを入力とする関数の戻り値に、たとえば大きいほうの値または小さいほうの値に設定されてもよい。
a. 一例では、異なるクリッピング・パラメータ/フィルタ係数/フィルタ・サポートが、同じクラス・インデックスを有するサンプルに使用されてもよいが、それらのいくつかは、パディングされたサンプルにアクセスすることを必要とし、他のものは必要としない。
b. 一例では、パディングされたサンプルにアクセスすることを必要とするサンプルをフィルタリングするためのクリッピング・パラメータ/フィルタ係数/フィルタ・サポートは、CTU/領域/スライス/タイル・レベルで信号伝達されてもよい。
c. 一例では、パディングされたサンプルにアクセスすることを必要とするサンプルをフィルタリングするためのクリッピング・パラメータ/フィルタ係数/フィルタ・サポートは、パディングされたサンプルにアクセスすることを必要としないサンプルをフィルタリングするために使用されるものから導出されてもよい。
i. 一例では、ブレット9aまたは9bが適用されてもよい。
a. たとえば、「境界にある」の定義は、異なる色成分については異なることがある。一例では、ルーマ・サンプルは、該サンプルと下部境界との間の距離がT1未満であれば下部境界にあり;クロマ・サンプルは、該サンプルと下部境界との間の距離がT2未満であれば下部境界にある。T1とT2は異なっていてもよい。
i. 一例では、カラー・フォーマットが4:4:4でない場合、T1とT2は異なっていてもよい。
a. 一例では、第1段階で、スライス/タイル/ブリックのパディング方法(たとえば、片側パディング)がまず適用される。その後、ALF仮想境界を処理するためのパディング方法(たとえば、両側パディング方法)が、第2段階の間にさらに適用される。この場合、第1段階の後のパディングされたサンプルは、利用可能であるとマークされ、ALF仮想境界プロセスにおいて何個のラインがパディングされるべきかを決定するために使用されてもよい。それらの境界に位置しないCTUを扱うための同じ規則(たとえば、図16A~C)が利用される。
a. 提案された諸方法を適用する境界は、水平境界であってもよい。
b. 提案された諸方法を適用する境界は、垂直境界であってもよい。
a. 一例では、「360仮想境界」がCTU境界と一致する場合、提案される方法が適用されてもよい。たとえば、「360仮想境界」におけるサンプルについては、両側パディング(2-side padding)のみがALFにおいて適用されうる。
b. 一例では、「360仮想境界」がCTU境界と一致しない場合、提案される方法は適用されなくてもよい。たとえば、「360仮想境界」のサンプルについては、片側パディングのみがALFにおいて適用されうる。
c. 一例では、「360仮想境界」の位置に関係なく、「360仮想境界」のサンプルについて同じパディング方法がALFにおいて適用されてもよい。
i. たとえば、「360仮想境界」におけるサンプルについては、片側パディングがALFにおいて適用されてもよい。
ii. たとえば、「360仮想境界」におけるサンプルについては、両側パディングがALFにおいて適用されてもよい。
d. 一例では、少なくとも1つの境界が「360仮想境界」であり、該「360仮想境界」の少なくとも1つがCTU境界と一致しない場合の複数の境界におけるサンプルについて、提案された方法は適用されなくてもよい。
i. たとえば、これらの複数の境界のいずれかを横切るサンプルは、片側パディングによってパディングされてもよい。
1. あるいはまた、さらに、「仮想境界」がある場合、片側パディング後にALFにおいて両側パディングが適用されてもよい。
e. 一例では、2種類の境界の間に位置するサンプルについて、その一方が「360仮想境界」であり、他方がそうでない場合、ALFプロセスにおいて1回だけ、パディングが呼び出される。
i. 一例では、ALF仮想境界を処理するためのパディング方法(たとえば、両側パディング方法)が呼び出されてもよい。
1. あるいはまた、ピクチャー(またはスライス/タイル/ブリック/サブピクチャー)境界を処理するためのパディング方法(たとえば、片側パディング)が呼び出されてもよい。
ii. あるいはまた、2つまたは複数のパディング・プロセスが順番に適用されてもよい。
1. 一例では、ピクチャー(またはスライス/タイル/ブリック/サブピクチャー)境界を処理するためのパディング方法(たとえば、片側パディング)がまず適用されてもよく、その後、ALF仮想境界を処理するためのパディング方法(たとえば、両側パディング方法)がさらに呼び出されてもよい。
a. あるいはまた、さらに、第1のパディング後のパディングされたサンプルは、第2のパディング・プロセスにおいて利用可能なものとして扱われる。
iii. 一例では、2種類以上の境界(たとえば、スライス境界/タイル境界/ブリック境界/360仮想境界/ALF仮想境界/サブピクチャー境界)の間に位置するサンプルについて、境界の一方のみが「360仮想境界」である(たとえば、図24に示されるように、第1の境界は「360仮想境界」であり、第2の境界は「ALF仮想境界」またはスライス/ブリック/タイル境界/サブピクチャー境界;またはその逆)場合、提案される方法が適用されてもよい。たとえば、これらのサンプルについては、両側パディングがALFにおいて適用されてもよい。
1. あるいはまた、これらの複数種類の境界が「360仮想境界」またはピクチャー境界のいずれかである場合、提案される方法は適用されなくてもよい。たとえば、これらのサンプルについては、ALFにおいて片側パディングのみが適用されてもよい。
f. 一例では、2種類以上の境界の間に位置するサンプルについて、それらの境界の少なくとも1つが「360仮想境界」であり、CTU境界と一致しない場合、提案される方法は適用されなくてもよい。
i. この場合、「360仮想境界」でのみサンプルを取り扱うが、他の種類の境界では取り扱わないために先行技術のよう扱われてもよい。
ii. 一例では、これらのサンプルについては、ALFにおいて片側パディングのみが適用されうる。
g. 一例では、2種類以上の境界の間に位置するサンプルについて、それらの境界の少なくとも1つが「360仮想境界」である場合、提案される方法は適用されなくてもよい。
i. この場合、「360仮想境界」でのみサンプルを取り扱うが、他の種類の境界では取り扱わないために先行技術のように扱われてもよい。
ii. 一例では、これらのサンプルについては、ALFにおいて片側パディングのみが適用されてもよい。
a. 一例では、「利用可能でない」参照サンプルは、まずその最も近い「利用可能な」水平位置にクリップされ、次いで、「利用可能でない」参照サンプルは、必要であれば、その最も近い「利用可能な」垂直位置にクリップされる。
b. 一例では、「利用可能でない」参照サンプルは、まずその最も近い「利用可能な」垂直位置にクリップされ、次いで、「利用可能でない」サンプルは、必要であれば、その最も近い「利用可能な」水平位置にクリップされる。
c. 一例では、「利用可能でない」参照サンプルの座標は、水平方向においてその最も近い「利用可能な」サンプル(たとえば、最小距離)の座標にクリップされる。
i. 一例では、座標(x1,y1)および(x2,y2)をもつ2つのサンプルについて、それらの間の水平距離はAbs(x1-x2)として計算されうる。
d. 一例では、「利用可能でない」参照サンプルの座標が、垂直方向におけるその最も近い「利用可能な」サンプル(たとえば、最小の距離)の座標にクリップされる。
i. 一例では、座標(x1,y1)および(x2,y2)をもつ2つのサンプルについて、それらの間の垂直距離はAbs(y1-y2)として計算されうる。
e. 一例では、「利用可能でない」サンプルは、その最も近い「利用可能な」サンプル(たとえば、最小の距離)にクリップされる。
i. 一例では、座標(x1,y1)および(x2,y2)をもつ2つのサンプルについて、それらの間の距離は、(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)として計算されてもよい。
ii. あるいはまた、2つのピクセル間の距離は、Abs(x1-x2)+Abs(y1-y2)として計算されてもよい。
f. 一例では、「利用可能でない」サンプルは、「利用可能な」サンプルが見つかるまで、あらかじめ定義された順序でパディングされうる。図31に例が示されている。ここで、Curは現在のブロック/CU/PU/CTUである。
i. たとえば、垂直方向の「利用可能な」サンプルがまずチェックされ、次いで、水平方向の「利用可能な」サンプルがチェックされてもよい。
ii. たとえば、水平方向の「利用可能な」サンプルがまずチェックされ、次いで、垂直方向の「利用可能な」サンプルがチェックされてもよい。
iii. たとえば、「利用可能でない」左上の近傍サンプル(たとえば、領域「1」内)については、まず、現在のブロック/CU/PU/CTUの左の近傍サンプル(たとえば、領域「4」内)がチェックされ、「利用可能な」サンプルがない場合は、次に、上の近傍サンプル(たとえば、領域「2」内)がチェックされる。左の近傍サンプルにも上の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの左上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
1. あるいはまた、「利用可能でない」左上の近傍サンプルについて、現在のブロック/CU/PU/CTUの上の近傍サンプルがチェックされ、「利用可能な」サンプルがない場合は、左の近傍サンプルがチェックされる。上の近傍サンプルにも左の近傍サンプルにも「利用可能な」サンプルが存在しない場合、現在のブロック/CU/PU/CTUの左上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
iv. たとえば、「利用可能でない」右上の近傍サンプル(たとえば、領域「3」内)については、まず、現在のブロック/CU/PU/CTUの右の近傍サンプル(たとえば、領域「5」内)がチェックされ、「利用可能な」サンプルがない場合は、次に、上の近傍サンプル(たとえば、領域「2」内)がチェックされる。右の近傍サンプルにも上の近傍サンプルにも「利用可能な」サンプルがない場合、現在のブロック/CU/PU/CTUの右上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
1. あるいはまた、「利用可能でない」右上の近傍サンプルについて、まず、現在のブロック/CU/PU/CTUの上の近傍サンプルがチェックされ、「利用可能な」サンプルがない場合は、次に右の近傍サンプルがチェックされる。上の近傍サンプルにも右の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの右上のサンプルが「利用可能でない」サンプルをパディングするために使用される。
v. たとえば、「利用可能でない」左下の近傍サンプル(たとえば、領域「6」内)について、まず、現在のブロック/CU/PU/CTUの左の近傍サンプル(たとえば、領域「4」内)がチェックされ、「利用可能な」サンプルがない場合は、次に、下の近傍サンプル(たとえば、領域「7」内)がチェックされる。左の近傍サンプルにも下の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの左下のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
1. あるいはまた、「利用可能でない」左下の近傍サンプルについて、まず、現在のブロック/CU/PU/CTUの下の近傍サンプルがチェックされ、「利用可能な」サンプルがない場合、次いで、左の近傍サンプルがチェックされる。下の近傍サンプルにも左の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの左下のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
vi. たとえば、「利用可能でない」右下の近傍サンプルについて、まず、現在のブロック/CU/PU/CTUの右の近傍サンプル(たとえば、領域「5」内)がチェックされ、「利用可能な」サンプルがない場合は、次に、下の近傍サンプル(たとえば、領域「7」内)がチェックされる。右の近傍サンプルにも下の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの右下のサンプルが「利用可能でない」サンプルをパディングするために使用される。
1. たとえば、「利用可能でない」右下の近傍サンプルについては、まず、現在のブロック/CU/PU/CTUの下の近傍サンプルがチェックされ、「使用可能」なサンプルがない場合は、次に右の近傍サンプルがチェックされる。下の近傍サンプルにも右の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの右下のサンプルが「利用可能でない」サンプルをパディングするために使用される。
vii. 一例では、各近傍領域について、一つまたは複数のサンプルが順番にチェックされうる。あるいはまた、1つだけがチェックされてもよい。
viii. あるいはまた、さらに、チェックのいずれも利用可能なサンプルを見つけることができない場合には、フィルタリングされるべき現在のサンプルの値が代わりに使用されてもよい。
ix. 一例では、「利用可能でない」左上/右上/左下/右下の近傍サンプルについて、それらは常に現在のブロック/CU/PU/CTU内のサンプルによってパディングされてもよい。
1. 一例では、「利用可能でない」左上の近傍サンプル(たとえば、図31の領域「1」内)については、現在のブロック/CU/PU/CTUの左上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
2. 一例では、「利用可能でない」右上の近傍サンプル(たとえば、図31の領域「3」内)については、現在のブロック/CU/PU/CTUの右上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
3. 一例では、「利用可能でない」左下の近傍サンプル(たとえば、図31の領域「6」内)については、現在のブロック/CU/PU/CTUの左下のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
4. 一例では、「利用可能でない」右下の近傍サンプル(たとえば、図31の領域「8」内)については、現在のブロック/CU/PU/CTUの右下のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
g. あるいはまた、現在のサンプルについて、フィルタリング・プロセスが無効にされる。
h. あるいはまた、ALFにおける分類プロセス(たとえば、現在のサンプルについての勾配計算)は、利用可能でない参照サンプルを使用することを許可されなくてもよい。
a. 一例では、現在のCTUがいかなる種類の境界とも一致しないが、現在のサンプルについてのフィルタリング・プロセス(たとえば、ALF分類/ALFフィルタリング・プロセス)が、異なるビデオ単位(たとえば、スライス)内の参照サンプルにアクセスする必要がある場合、項目16に記載された方法が適用されてもよい。
i. あるいはまた、さらに、現在のCTUがいかなる種類の境界とも一致しないが、現在のサンプルについてのフィルタリング・プロセス(たとえば、ALF分類/ALFフィルタリング・プロセス)が、異なるビデオ単位(たとえば、スライス)内の参照サンプルにアクセスする必要があり、スライス境界をまたぐフィルタリングが許可されない場合、項目16に記載される方法が適用されてもよい。
ii. あるいはまた、さらに、現在のCTUがいかなる種類の境界とも一致しないが、現在のサンプルについてのフィルタリング・プロセス(たとえば、ALF分類/ALFフィルタリング・プロセス)が、異なるビデオ単位(たとえば、スライス)内の参照サンプルおよび同じビデオ単位内の参照サンプルにアクセスする必要があり、スライス境界をまたぐフィルタリングが禁止される場合、項目16に記載された方法が適用されてもよい。
b. 一例では、現在のCTUが少なくとも1種類の境界と一致する場合、統一されたパディング方法(たとえば、両側または片側パディング)が適用されうる。
i. あるいはまた、現在のCTUが複数種類の境界と一致し、それらの境界を越えるフィルタリングが許容されない場合、統一されたパディング方法(たとえば、両側または片側パディング)が適用されうる。
c. 一例では、両側パディングまたは/および片側パディングによってパディングできない「利用可能でない」サンプルのみが、項目16に記載された方法を用いてパディングされてもよい。
a. あるいはまた、あるスライスについて、フィルタリング・プロセスが該スライスについてのスライス境界をまたぐことができるかどうかを示すために、PPS/スライス・ヘッダ内で、1つの構文要素が信号伝達されてもよい。
b. あるいはまた、あるブリック/タイルについて、フィルタリング・プロセスが該ブリック/タイルの境界をまたぐことができるかどうかを示すために、PPSにおいて、1つの構文要素が信号伝達されてもよい。
c. 一例では、構文要素はSPS/PPSにおいて信号伝達されて、フィルタリング・プロセスが、ビデオ/ピクチャーのブリック境界または/およびタイル境界または/およびスライス境界または/および「360度仮想境界」をまたぐことができるかどうかを示すことができる。
i. 一例では、異なる種類の境界について別々の構文要素が信号伝達されてもよい。
ii. 一例では、すべての種類の境界について1つの構文要素が信号伝達されてもよい。
iii. 一例では、いくつかの種類の境界について1つの構文要素が信号伝達されてもよい。
1. たとえば、1つの構文要素が、ブリック境界とタイル境界の両方について信号伝達されてもよい。
d. 一例では、フィルタリング・プロセスに関してPPS/スライス・レベルの指示があるかどうかを示すために、SPSにおいて構文要素が信号伝達されてもよい。
i. 一例では、異なる種類の境界について別々の構文要素が信号伝達されてもよい。
ii. 一例では、すべての種類の境界について1つの構文要素が信号伝達されてもよい。
iii. 一例では、いくつかの種類の境界について1つの構文要素が信号伝達されてもよい。
1. たとえば、1つの構文要素が、ブリック境界とタイル境界の両方について信号伝達されてもよい。
iv. フィルタリング・プロセスがスライス/ブリック/タイル/サブピクチャー境界をまたぐことができるかどうかに関する指示は、SPSにおける対応する構文要素がある値に等しい場合にのみ、PPS/スライス・ヘッダにおいて信号伝達されてもよい。
1. あるいはまた、フィルタリング・プロセスがスライス/ブリック/タイル/サブピクチャー境界をまたぐことができるかどうかに関する指示は、SPSにおける対応する構文要素がある値に等しい場合には、PPS/スライス・ヘッダにおいて信号伝達されなくてもよい。
a. この場合、SPSにおける指示がある値に等しい場合、フィルタリング・プロセスは、スライス/ブリック/タイル/サブピクチャー境界をまたぐことは許されなくてもよい。
b. この場合、フィルタリング・プロセスは、SPSにおける前記指示がある値に等しい場合、スライス/ブリック/タイル/サブピクチャー境界をまたいでもよい。
a. 一例では、(x0-offsetX0,y0-offsetY0)のような左上の領域に位置する代表的なサンプルがチェックされてもよい。
i. 一例では、(offsetX0,offsetY0)は、(1,1)、(2,1)または(1,2)と等しくてもよい。
b. 一例では、(x0+offsetX1,y0-offsetY1)のような右上の領域に位置する代表的なサンプルがチェックされてもよい。
i. 一例では、(offsetX1,offsetY1)は(ctbXSize,1)、(ctbXSize+1,1)または(ctbXSize,2)と等しくてもよい。
c. 一例では、(x0-offsetX2,y0+offsetY2)のような左下の領域に位置する代表的なサンプルがチェックされてもよい。
i. 一例では、(offsetX2,offsetY2)は、(1,ctbYSize)、(2,ctbYSize)または(1,ctbYSize+1)と等しくてもよい。
d. 一例では、(x0+offsetX3,y0+offsetY3)のような右下の領域に位置する代表的なサンプルがチェックされてもよい。
i. 一例では、(offsetX2,offsetY2)は、(ctbXSize,ctbYSize)、(ctbXSize+1,ctbYSize)または(ctbXSize,ctbYSize+1)と等しくてもよい。
e. 一例では、ある領域内の代表的なサンプルが異なるビデオ単位内にあり、異なるビデオ単位のまたがるフィルタリングが許可されない場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
i. 一例では、ある領域内の代表的なサンプルが異なるスライス内にあり、loop_filter_across_slices_enabled_flagが0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
ii. 一例では、ある領域内の代表的なサンプルが異なるブリック内にあり、loop_filter_across_bricks_enabled_flagが0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
iii. 一例では、ある領域内の代表的なサンプルが異なるサブピクチャー内にあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。一例では、SubPicIdxは現在のブロックを含む現在のサブピクチャーのインデックスである。
f. 一例では、K個の領域内のK個の代表的なサンプルのうちのM個が現在のCTUとは異なるビデオ単位にあり、異なるビデオ単位にまたがるフィルタリングが許可されない場合、K個の領域内でアクセスされるサンプルはすべて利用可能でないとしてマークされる。
i. 一例では、Mは1に等しく、Kは2に等しい。
1. たとえば、K個の領域は、左上の近傍領域および右上の近傍領域を含みうる。
2. たとえば、K個の領域は、左上の近傍領域および左下の近傍領域を含みうる。
3. たとえば、K個の領域は、右上の近傍領域および右下の近傍領域を含みうる。
4. たとえば、K個の領域は、左下の近傍領域および右下の近傍領域を含みうる。
5. あるいはまた、Mは2に等しくてもよい。
ii. 一例では、Mは1に等しく、Kは3に等しい。
1. たとえば、K個の領域は、左上、右上および左下の近傍領域を含みうる。
2. たとえば、K個の領域は、左上、右上および右下の近傍領域を含みうる。
3. たとえば、K個の領域は、右上、左下および右下の近傍領域を含みうる。
4. たとえば、K個の領域は、左上、左下および右下の近傍領域を含みうる。
5. あるいはまた、Mは2または3に等しい。
iii. 一例では、Mは1に等しく、Kは4に等しい。たとえば、K個の領域は、左上、右上、左下および右下の近傍領域を含みうる。
1. あるいはまた、Mは1または2または3に等しくてもよい。
iv. 一例では、K個の代表的サンプルのうちのN個(M<=N<=K)をチェックして、現在のCTUとは異なるビデオ単位内に、該N個の代表的サンプルのうちのM個があるかどうかを判定する。
1. 一例では、NはMに等しく、M個の事前に定義された代表的なサンプルのみがチェックされる。
2. たとえば、Mが1に等しく、Kが2に等しい場合、K個の領域は、左上および右上の近傍領域を含んでいてもよく、左上の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、右上の近傍領域の代表的なサンプルのみがチェックされる。
3. たとえば、Mが1に等しく、Kが2に等しい場合、K個の領域は、左下および右下の近傍領域を含んでいてもよく、左下の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、右下の近傍領域の代表的なサンプルのみがチェックされる。
4. たとえば、Mが1に等しく、Kが2に等しい場合、K個の領域は左上および左下の近傍領域であり、左上の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、左下の近傍領域の代表的なサンプルのみがチェックされる。
5. たとえば、Mが1に等しく、Kが2に等しい場合、K個の領域は右上および右下の近傍領域であり、右上の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、右下の近傍領域の代表的なサンプルのみがチェックされる。
6. たとえば、Mが1に等しく、Kが4に等しい場合、K領個の域は左上、右上、左下、右下の近傍領域であり、左上の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、右下の近傍領域の代表的なサンプルのみがチェックされる。
b. あるいはまた、左下の近傍領域の代表的なサンプルのみがチェックされる。
c. あるいはまた、右上の近傍領域の代表的なサンプルのみがチェックされる。
v. 一例では、ある領域内の代表的なサンプルが異なるスライス内にあり、loop_filter_across_slices_enabled_flagが0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
vi. 一例では、ある領域内の代表的なサンプルが異なるブリック内にあり、loop_filter_across_bricks_enabled_flagが0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
vii. 一例では、ある領域内の代表的なサンプルが異なるサブピクチャー内にあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。一例では、SubPicIdxは現在のブロックを含む現在のサブピクチャーのインデックスである。
g. 上記の例では、offsetXi/offsetYi(ここで、iは0~3)は整数である。
i. あるいはまた、さらに、offsetXi/offsetYi(ここで、iは0~3)は、CTUの幅/高さに等しく設定されてもよい。
h. 一例では、現在のブロックはCTUであってもよい。
i. 一例では、現在のブロックはALF処理単位であってもよい。
j. 一例では、現在ブロックは狭いALF処理単位であってもよい。
a. ALFフィルタリングまたは/および分類プロセスにおいて、左上の近傍領域に対してパディングを実行するかどうか、および、上の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
i. 一例では、上の近傍領域が「利用可能でない」としてマークされ、左上の近傍領域が「利用可能」としてマークされる場合、パディングは、上の近傍領域に対しては実行されるが、左上の近傍領域に対しては実行されない。
ii. 一例では、左上の近傍領域が「利用可能でない」としてマークされ、上の近傍領域が「利用可能」としてマークされる場合、パディングは、左上の近傍領域に対しては実行されるが、上の近傍領域に対しては実行されない。
b. ALFフィルタリングまたは/および分類プロセスにおいて、右上の近傍領域に対してパディングを実行するかどうか、および上の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
c. ALFフィルタリングまたは/および分類プロセスにおいて、左上の近傍領域に対してパディングを実行するかどうか、および左の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
d. ALFフィルタリングまたは/および分類プロセスにおいて、左下の近傍領域に対してパディングを実行するかどうか、および左の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
e. ALFフィルタリングまたは/および分類プロセスにおいて、右下の近傍領域に対してパディングを実行するかどうか、および右の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
f. ALFフィルタリングまたは/および分類プロセスにおいて、右上の近傍領域に対してパディングを実行するかどうか、および右の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
g. ALFフィルタリングまたは/および分類プロセスにおいて、右下の近傍領域に対してパディングを実行するかどうか、および下の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
h. ALFフィルタリングまたは/および分類プロセスにおいて、左下の近傍領域に対してパディングを実行するかどうか、および下の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
i. 一例では、左上または/および右上の近傍領域内のサンプルが「利用可能でない」と判定される場合、上の近傍領域内のサンプルは、依然として「利用可能」と判定されうる(たとえば、現在のCTUと同じビデオ単位内にある場合)。たとえば、サンプル・パディングは、ALFフィルタリングまたは/および分類プロセスにおいて上の近傍領域について実行されないことがある。
j. 一例では、左下または/および右下の近傍領域のサンプルが「利用可能でない」と判定される場合、下の近傍領域のサンプルは、依然として「利用可能」と判定されうる(たとえば、現在のCTUと同じビデオ単位内にある場合)。たとえば、ALFフィルタリングまたは/および分類プロセスにおいて、下の近傍領域についてサンプル・パディングが実行されないことがある。
k. 一例では、左上または/および左下の近傍領域内のサンプルが「利用可能でない」と判定される場合、左の近傍領域内のサンプルは、依然として「利用可能」と判定されうる(たとえば、現在のCTUと同じビデオ単位内にある場合)。たとえば、ALFフィルタリングまたは/および分類プロセスにおいて、左の近傍領域についてサンプル・パディングが実行されないことがある。
l. 一例では、右上または/および右下の近傍領域のサンプルが「利用可能でない」と判定される場合、右の近傍領域のサンプルが依然として「利用可能」と判定されることがある(たとえば、現在のCTUと同じビデオ単位内にある場合)。たとえば、サンプル・パディングは、ALFフィルタリングまたは/および分類プロセスにおいて、右の近傍領域について実行されないことがある。
m. 一例では、「利用可能性」チェック方法は、ALF処理単位に適用されてもよい。
n. 一例では、「利用可能性」チェック方法は、狭いALF処理単位に適用されてもよい。
a. 一例では、現在の処理単位内のサンプルが「利用可能でない」(たとえば、現在のCTUとは異なる「ビデオ単位」内にある)場合、それらは、現在のCTU内のサンプルによってパディングされてもよい。
b. 一例では、現在の処理単位の左/右の列が、左/右の近傍サンプルが「利用可能でない」場合に、それらをパディングするために使用されてもよい。
c. 一例では、現在の処理単位の最上行/最下行が、上/下の近傍サンプルが「利用可能でない」場合に、それらをパディングするために使用されてもよい。
d. 一例では、現在の処理単位の左上/右上/左下/右下コーナーサンプルは、左上/右上/左下/右下の近傍サンプルが「利用可能でない」場合に、左上/右上/左下/右下の近傍サンプルをパディングするために使用されてもよい。
e. 一例では、現在のCTUの左上の近傍サンプルが「利用可能でなく」、かつ現在のCTUの上の近傍サンプルが「利用可能」である場合、図32Aに示されるように、上の近傍サンプルが、左上の近傍サンプルをパディングするために使用されてもよい。
f. 一例では、現在のCTUの左上および上の近傍サンプルが両方とも「利用可能でない」場合、図32Cに示されるように、現在のCTUの最上行のサンプルが、まず、上の近傍サンプルをパディングするために使用され、次いで、パディングされた上の近傍サンプルが、左上の近傍サンプルをパディングするために使用されてもよい。
g. 一例では、左上、上および左の近傍サンプルがすべて「利用可能でない」場合は、図32Dに示されるように、現在のCTUの最上段のサンプルがまず、上の近傍サンプルをパディングするために使用されてもよく、次いで、パディングされた上の近傍サンプルが、左上の近傍サンプルをパディングするために使用されてもよい。現在のCTUの左の列が、左の近傍サンプルをパディングするために使用されてもよい。
h. ループフィルタリング(たとえば、ALF)のためのパディングをどのように適用するかは、処理単位(たとえば、ALF処理単位または狭いALF処理単位)に対する、必要とされるサンプル位置が、利用可能でないことに依存しうる。
i. 一例では、現在の処理単位の利用可能でない近傍サンプルは、現在の処理単位内のサンプルにのみ依存してパディングされる。換言すれば、現在の処理単位の利用可能でない近傍サンプルのためのパディング・プロセスは、現在の処理単位の外のどのサンプルからも切り離される。
ii. 一例では、現在の処理単位の左上の近傍サンプルが「利用可能でない」場合、現在の処理単位の左上のサンプルが、そのような「利用可能でない」サンプルをパディングするために使用されてもよい。一例を図33a~dおよび図34に示す。
iii. 一例では、現在の処理単位の右上の近傍サンプルが「利用可能でない」場合、図33a~dおよび図34に示されるように、現在の処理単位の右上のサンプルが、そのような「利用可能でない」サンプルをパディングするために使用されてもよい。
iv. 一例では、現在の処理単位の左下の近傍サンプルが「利用可能でない」場合、図33a~dおよび図34に示されるように、現在の処理単位の左下のサンプルが、そのような「利用可能でない」サンプルをパディングするために使用されてもよい。
v. 一例では、現在の処理単位の右上の近傍サンプルが「利用可能でない」場合、図33a~dおよび図34に示されるように、現在の処理単位の右上のサンプルが、そのような「利用可能でない」サンプルをパディングするために使用されてもよい。
i. 一例では、近傍サンプルが異なるスライス/タイル/ブリック/サブピクチャー/360ビデオ仮想境界内にある場合、またはピクチャー境界の外側にある場合、そのサンプルは利用可能でないとしてマークされる。
i. あるいはまた、利用可能でないサンプルの決定は、上記の諸項目を用いて定義されてもよい。
j. 一例では、上記の方法は、フィルタリング・プロセス中に適用されるが、分類プロセス中には適用されないのでもよい。
i. あるいはまた、上記の方法は、フィルタリング・プロセスおよび分類プロセスの間に適用されてもよい。
ii. あるいはまた、上記の方法は、フィルタリング・プロセスおよび分類プロセスの間に適用されてもよい。
a. 処理単位の上の近傍サンプルが利用可能でない場合、それらは処理単位の最上段を用いてパディングされてもよい。
i. あるいはまた、さらに、左上の近傍サンプルは、処理単位の左上のサンプルをパディングされてもよい。
ii. あるいはまた、さらに、右上の近傍サンプルは、処理単位の右上のサンプルをパディングされてもよい。
b. 処理単位の下の近傍サンプルが利用可能でない場合、それらは、処理単位の最下行をパディングされてもよい。
i. あるいはまた、さらに、左下の近傍サンプルは、処理単位の左下のサンプルをパディングされてもよい。
ii. あるいはまた、さらに、右下の近傍サンプルは、処理単位の右下のサンプルをパディングされてもよい。
c. 処理単位の左近傍サンプルが利用可能でない場合、それらは、処理単位の左列をパディングされてもよい。
d. 処理単位の右の近傍サンプルが利用可能でない場合、それらは処理単位の右列をパディングされてもよい。
e. 処理単位の左の近傍サンプルおよび上の近傍サンプルが利用可能であり、処理単位の左上の近傍サンプルが利用可能でないである場合、左上の近傍サンプルは、処理単位の左上のサンプルをパディングされてもよい。
f. 処理単位の右の近傍サンプルおよび下の近傍サンプルが利用可能であり、処理単位の右下の近傍サンプルが利用可能でないである場合、右の近傍サンプルは、処理単位の右下のサンプルをパディングされてもよい。
g. 処理単位は、ctuUpで示されるCTUのN個(Nは整数、たとえばN=4)行と、前記ctuUPの下のctuDownで示されるCtbSize-M(Mは整数、たとえばM=N)行とを含むことができる。処理単位の近傍サンプルが利用可能であるかどうかをチェックするときは、ctuDownが使用されてもよい。
i. 一例では、近傍サンプルがctuDownとは異なるビデオ単位内にあり(たとえば、近傍サンプルとctuDownが異なるブリック/タイル/スライス/サブピクチャーに属するか、またはそれらが360の仮想境界の異なる側にある)、そのようなビデオ単位を横切るフィルタリングが許可されない場合、それは「利用可能でない」とみなされる。
ii. あるいはまた、近傍サンプルの利用可能性をチェックするために、ctuUpが使用されてもよい。
h. 繰り返しパディングが、ALF仮想境界を除くすべての境界に適用されてもよい。
i. あるいはまた、繰り返しパディングが、すべての境界に適用されてもよい。
ii. あるいはまた、繰り返しパディングが、すべての水平境界に適用されてもよい。
iii. あるいはまた、繰り返しパディングが、すべての垂直境界に適用されてもよい。
iv. あるいはまた、ミラーリングされたパディングが、すべての水平境界に適用されてもよい。
v. あるいはまた、ミラーリングされたパディングが、すべての垂直境界に適用されてもよい。
i. 一例では、処理単位は、一つまたは複数のブリック/スライス/タイル/サブピクチャー境界または/および360仮想境界がこれに交差し、そのような境界を横切るフィルタリングが許されない場合、その処理単位は、複数の処理単位に(水平にまたは垂直に)分割されてもよい。
i. あるいはまた、さらに、分割プロセスは、どんなブリック/スライス/タイル/サブピクチャー境界または/および360仮想境界またはALF仮想境界もどの処理単位にも交差しなくなるまで、リクルーシブに(reclusively)実行されてもよく、ここで、そのような境界を横断するフィルタリング・プロセスは禁止される。たとえば、そのような境界は処理単位の境界でしかありえない。そのような処理単位は、以下、「基本ALF処理単位」と呼ぶ。
ii. あるいはまた、さらに、ALFプロセスは、そのような分割プロセスが終了した後に実行される、たとえば、ALFプロセスは、「基本ALF処理単位」に対して実行される。
iii. あるいはまた、さらに、上記のパディング方法が、「基本ALF処理単位」に対して実行されてもよい。
a. あるいはまた、上記の提案される諸方法は、現在ブロック外のサンプルにアクセスすることを必要とする他の符号化ツール(非フィルタリング方法)に適用されうる。
b. 上記の提案される諸方法はCC-ALF(cross-component adaptive loop filter[成分横断適応ループ・フィルタ])に適用されうる。
a. 一例では、考慮ピクチャー(または出力ピクチャー/適合窓/スケーリング窓)の外側のサンプルは、フィルタ・オン/オフ・フラグの信号伝達される値にかかわらず、フィルタリングされることが禁止されてもよい。
a. DPS/SPS/VPS/PPS/APS/ピクチャーヘッダ/スライス・ヘッダ/タイル・グループ・ヘッダ/最大符号化単位(Largest coding unit、LCU)/符号化単位(CU)/LCU行/LCUのグループ/TU/PUブロック/ビデオ符号化単位において信号伝達されるメッセージ
b. CU/PU/TU/ブロック/ビデオ符号化単位の位置
c. 現在ブロックおよび/またはその近傍ブロックのブロック寸法
d. 現在ブロックおよび/またはその近傍ブロックのブロック形状
e. 現在ブロックおよび/またはその近傍ブロックの符号化された情報
f. カラー・フォーマットの指示(4:2:0、4:4:4など)
g. 符号化ツリー構造
h. スライス/タイルグループタイプおよび/またはピクチャータイプ
i. 色成分(たとえば、クロマ成分またはルーマ成分にのみ適用されることがある)
j. 時間レイヤーID
k. 規格のプロファイル/レベル/階層
以下の諸セクションでは、開示された技術のいくつかの実施形態を受け入れるように、VVC規格の現行バージョンがどのように修正されるかのいくつかの例が記載される。新たに追加された部分は、太字のイタリック体の下線付きテキストで示される〔便宜上、単に下線で示すこともある〕。削除された部分は[[]]を使って示される。
loop_filter_across_bricks_enabled_flagが1に等しいことは、PPSを参照するピクチャーにおいて、ループ内フィルタリング動作がブリック境界をまたいで実行されうることを指定する。loop_filter_across_bricks_enabled_flagが0に等しいことは、PPSを参照するピクチャーにおいて、ループ内フィルタリング動作がブリック境界をまたいで実行されないことを指定する。ループ内フィルタリング動作は、ブロッキング解除フィルタ、サンプル適応オフセット・フィルタ[[、および適応ループ・フィルタ]]動作を含む。存在しない場合、loop_filter_across_bricks_enabled_flagの値は1に等しいと推定される。
loop_filter_across_slices_enabled_flagが1に等しいことは、PPSを参照するピクチャーにおいて、ループ内フィルタリング動作がスライス境界をまたいで実行されうることを指定する。loop_filter_across_slices_enabled_flagが0に等しいことは、PPSを参照するピクチャーにおいて、ループ内フィルタリング動作がスライス境界をまたいで実行されないことを指定する。ループ内フィルタリング動作は、ブロッキング解除フィルタ、サンプル適応オフセット・フィルタ[[、および適応ループ・フィルタ]]動作を含む。存在しない場合、loop_filter_across_slices_enabled_flagの値は0に等しいと推定される。
図21は、ピクチャーにおけるCTUの処理を示す。図19と比べた相違は、破線でハイライトされている。
8.8.5.2 ルーマ・サンプルについての符号化ツリー・ブロック・フィルタリング・プロセス
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタ処理され再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・filtIdx[x][y]によって指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]およびルーマ・クリッピング値の配列c[j]は、j=0..11として、次のように導出される:
・……
・ルーマ・フィルタ係数およびクリッピング値インデックスidxは、transposeIdx[x][y]に依存して、次のように導出される:
・……
・i,j=-3..3として、ルーマ・サンプルの所与の配列recPicture内の対応するルーマ・サンプル(x,y)のそれぞれについての位置(hx+i,vy+j)は次のように導出される:
・……
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件[[のうち一つまたは複数]]が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
[[・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。]]
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。
・再構成されたサンプル・オフセットr1、r2、およびr3は、水平方向ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
・……
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマ符号化ツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1230)
ctbHeightC=CtbSizeY/SubHeightC (8-1231)
フィルタ処理された再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマ符号化ツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1、y=0..ctbHeightC-1として、次のようにフィルタリングされる:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・以下の条件[[のうち一つまたは複数]]が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・[[現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。]]
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。
・再構成されたサンプル・オフセットr1、r2は、水平方向ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
……
この実施形態は、ALF分類プロセス(セクション4におけるブレット7に対応)において、VPDU領域より下のサンプルを使用することを禁止する例を示す。
このプロセスの入力は以下の通り:
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)、
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL。
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、またはxとyの両方が不均一な数である場合、次が適用される:
2. 変数minY、maxYおよびacは次のように導出される:
・変数hv1、hv0およびdirHVは次のように導出される:
……
・変数d1、d0およびdirDは次のように導出される:
……
5. 変数avgVar[x][y]は、x,y=0..CtbSizeY-1として、次のように導出される:
複数の種類の境界(たとえば、スライス/ブリック境界、360度の仮想境界)に位置するサンプルについて、パディング・プロセスは1回だけ呼び出される。そして、1つの側あたり何個のラインがパディングされるかは、境界に対する現在のサンプルの位置に依存する。
8.8.5.2 ルーマ・サンプルについての符号化ツリー・ブロック・フィルタリング・プロセス
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタ処理され再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・i,j=-3..3として、ルーマ・サンプルの所与の配列〔アレイ〕recPicture内の対応するルーマサンプル(x,y)のそれぞれの位置(hx+i,vy+j)は以下のように導かれる:
・pps_loop_filter_across_virtual_boundises_disabled_flagが1に等しく、xCtb+x-PpsVirtualBoundariesPosX[n]が任意のn=0..pps_num_ver_virtual_boundies-1について0以上3未満である場合、以下が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1197)
・それ以外の場合、pps_loop_filter_across_virtual_boundises_disabled_flagが1に等しく、かつ任意のn=0..pps_num_ver_virtual_boundies-1についてPpsVirtualBoundariesPox[n]-xCtb-xが0より大きく4未満である場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1198)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1199)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1200)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4より小さい場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1201)]]
・[[それ以外の場合、]]次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1202)
・[[変数applyVirtualBoundaryは次のように導出される:
・以下の条件の一つまたは複数が真である場合、applyVirtualBoundaryは0に設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に設定される。]]
・変数boundaryPos1およびboundaryPos2は、yCtbはyCtbに等しく、yはyに等しいとして8.8.5.5で指定されているルーマ・サンプルについての垂直境界位置導出プロセスを呼び出すことによって導出される。
このプロセスの入力は以下の通り:
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)、
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL。
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_ver_virtual_boundies-1についてxCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1208)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_ver_virtual_boundies-1についてPpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく6より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1209)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1210)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundies-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1211)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundies-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1212)
・それ以外の場合、次が適用される:
・yCtb+CtbSizeYがpic_height_in_luma_samples以上である場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・それ以外の場合、yがCtbSizeY-4より小さい場合、次が適用される:
vy+j=Clip3(0,yCtb+CtbSizeY-5,yCtb+y+j) (8-1214)
・それ以外の場合、次が適用される:
vy+j=Clip3(yCtb+CtbSizeY-4,pic_height_in_luma_samples-1,yCtb+y+j) (8-1215)]]
・変数boundaryPos1およびboundaryPos2は、yCtbはyCtbに等しく、yはyに等しいとして8.8.5.5で指定されているルーマ・サンプルについての垂直境界位置導出プロセスを呼び出すことによって導出される。
・boundaryPos1が-1に等しく、boundaryPos2が-1に等しい場合、次が適用される:
h x+i =Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1211)
・それ以外の場合、boundaryPos1が-1に等しくなく、boundaryPos2が-1に等しい場合、次が適用される:
・yがboundaryPos1より小さい場合、次が適用される:
v y+j =Clip3(0,yCtb+boundaryPos1-1,yCtb+y+j) (8-1215)
・それ以外の場合、yがboundaryPos1以上である場合、次が適用される:
v y+j =Clip3(yCtb+boundaryPos1,pic_height_in_luma_samples-1,yCtb+y+j) (8-1216)
・それ以外の場合(boundaryPos1が-1に等しくなく、boundaryPos2が-1に等しくない場合)、次が適用される:
・yがboundaryPos1より小さい場合、次が適用される:
v y+j =Clip3(0,yCtb+boundaryPos1-1,yCtb+y+j) (8-1215)
・それ以外の場合、yがboundaryPos2以上である場合、次が適用される:
v y+j =Clip3(yCtb+boundaryPos2,pic_height_in_luma_samples-1,yCtb+y+j) (8-1216)
・それ以外の場合(yがboundaryPos1より大きくboundaryPos2以下)、次が適用される:
v y+j =Clip3(yCtb+boundaryPos1,yCtb+boundaryPos2-1,yCtb+y+j) (8-1216)
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、またはxとyの両方が非偶数である場合、次が適用される:
・(y<<2)が(CtbSizeY-8)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは-2に設定され、maxYは3に設定され、acは96に等しく設定される。
・それ以外の場合、(y<<2)が(CtbSizeY-4)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。
・変数boundaryPos1およびboundaryPos2は、yCtbはyCtbに等しく、yはyに等しいとして、8.8.5.5で指定されているルーマ・サンプルについての垂直境界位置導出プロセスを呼び出すことによって導出される。
・boundaryPos1が-1に等しくなく、boundaryPos2が-1に等しい場合、次が適用される:
・yがboundaryPos1-4に等しい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acは96に等しく設定される。
・それ以外の場合、yがboundaryPos1に等しい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。
・それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され、acは64に等しく設定される。
・それ以外の場合、boundaryPos1が-1に等しくなく、boundaryPos2が-1に等しくない場合、次が適用される:
・yがboundaryPos1-4に等しい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acが96に等しく設定される。
・それ以外の場合、yがboundaryPos2に等しい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。
・それ以外の場合、yがboundaryPos1に等しく、boundaryPos2がboundaryPos2+8以上である場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。
・それ以外の場合、yがboundaryPos1に等しく、boundaryPos2がboundaryPos2+4に等しい場合、minYは0に等しく設定され、maxYは3に等しく設定され、acは128に等しく設定される。
・それ以外の場合、yがboundaryPos2-4に等しく、boundaryPos2がboundaryPos2+8より大きい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acは96に等しく設定される。
・それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され、acは64に等しく設定される。
・それ以外の場合(boundaryPos1は-1に等しく、boundaryPos2は-1に等しい)、minYは-2に等しく設定され、maxYは5に等しく設定され、acは64に等しく設定される。
・[[それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され、acは64に等しく設定される。]]
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされ再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマ符号化ツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1245)
ctbHeightC=CtbSizeY/SubHeightC (8-1246)
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_ver_virtual_boundaries-1についてxCtbC+x-PpsVirtualBoundariesPosX[n]/SubWidthCが0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n]/SubWidthC,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1247)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_ver_virtual_boundaries-1についてPpsVirtualBoundariesPosX[n]/SubWidthC-xCtbC-xが0より大きく3より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]/SubWidthC-1,xCtbC+x+i) (8-1248)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1249)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてyCtb+y-PpsVirtualBoundariesPosY[n]/SubHeightCが0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n]/SubHeightC,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1250)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてPpsVirtualBoundariesPosY[n]/SubHeightC-yCtbC-yが0より大きく3より小さい場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]/SubHeightC-1,yCtbC+y+j) (8-1251)
・それ以外の場合、]]次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1252)
・[[変数applyVirtualBoundaryは次のように導出される:
・以下の条件の一つまたは複数が真である場合、applyVirtualBoundaryは0に設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に設定される。]]
・変数boundaryPos1およびboundaryPos2は、yCtbはyCtbに等しく、yはyに等しいとして、8.8.5.5で指定されているルーマ・サンプルについての垂直境界位置導出プロセスを呼び出すことによって導出される。
・変数boundaryPos1は、boundaryPos1/SubWidthCに等しく設定される。
・変数boundaryPos2は、boundaryPos2/SubWidthCに等しく設定される。
・再構成されたサンプル・オフセットr1およびr2は、水平ルーマ・サンプル位置yおよびapplyVirtualBoundaryに従ってテーブル8-24において指定される。
・変数currは次のように導出される:
curr=recPicture[hx,vy] (8-1253)
・クロマ・フィルタ係数の配列f[j]とクロマ・クリッピング値の配列c[j]は、j=0..5として、次のように導出される:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][j] (8-1254)
c[j]=AlfClipC[slice_alf_aps_id_chroma][j] (8-1255)
・変数sumは次のように導出される:
・pcm_loop_filter_disabled_flagおよびpcm_flag[(xCtbC+x)*SubWidthC][(yCtbC+y)*SubHeightC]がどちらも1に等しい場合、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=recPictureL[hx,vy] (8-1258)
・それ以外の場合(pcm_loop_filter_disabled_flagが0に等しい、またはpcm_flag[x][y]が0に等しい)、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum) (8-1259)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマ符号化ツリー・ブロックの左上のサンプルの垂直位置を指定するルーマ位置yCtb。
・現在のルーマ符号化ツリー・ブロックの左上のサンプルに対する現在のピクセルの垂直位置を指定するルーマ位置y。
このプロセスの出力は以下の通り:
・上の垂直境界位置boundaryPos1。
・下の垂直境界位置boundaryPos2。
・変数boundaryPos1は次のように導出される:
・変数boundaryPos1が-1に設定される。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、次が適用される:
boundaryPos1=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4より小さい場合、次が適用される:
boundaryPos1=PpsVirtualBoundariesPosY[n] (8-1201)
・変数boundaryPos2は次のように導出される:
・変数boundaryPos2が-1に設定される。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合、次が適用される:
・CtbSizeY-yが4より小さい場合、変数boundaryPos2はCtbSizeYに等しく設定される。
・それ以外の場合、現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合、次が適用される:
・CtbSizeY-yが4より小さい場合、変数boundaryPos2はCtbSizeYに等しく設定される。
・それ以外の場合、現在の符号化ツリー・ブロックの上部境界がブリックの上部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合、次が適用される:
・yが3より小さい場合、変数boundaryPos2は0に設定される。
・それ以外の場合、現在の符号化ツリー・ブロックの上部境界がスライスの上部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合、次が適用される:
・yが3より小さい場合、変数boundaryPos2は0に設定される。
・変数boundaryPos1が-1に等しい場合、次が適用される:
・変数boundaryPos1は、boundaryPos2に等しい。
・変数boundaryPos2は-1に等しい。
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうち一つまたは複数が真である場合、applyVirtualBoundaryは0に等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・それ以外の場合、applyVirtualBoundaryは1に設定される。
・applyVirtualBoundaryが1に等しい場合、次が適用される:
・boundaryPos1が-1に等しい場合、boundaryPos1はCtbSizeY-4に等しく設定される。
・それ以外の場合、boundaryPos2が-1に等しい場合、boundaryPos2はCtbSizeY-4に等しく設定される。
・boundaryPos1が-1に等しくなく、boundaryPos1が-1に等しくない場合、次が適用される:
・boundaryPos1がboundaryPos2に等しい場合、boundaryPos2は-1に等しく設定される。
・それ以外の場合、boundaryPos1がboundaryPos2より大きい場合、次が適用される:
・変数tmpPosは、boundaryPos2に等しく設定される。
・変数boundaryPos2は、boundaryPos1に等しく設定される。
変数boundaryPos1は、tmpPosに等しく設定される。
CTUについて、いかなる境界(たとえば、ピクチャー/スライス/タイル/ブリック/サブピクチャー境界)とも一致しないことがある。しかしながら、現在の単位(ピクチャー/スライス/タイル/ブリック/サブピクチャーなど)の外側のサンプルにアクセスする必要があることがある。スライス境界をまたぐフィルタリング(たとえば、loop_filter_across_slices_enabled_flagが偽)が無効にされている場合は、現在の単位の外側のサンプルをパディングする必要がある。
この実施形態では、以下の主な考え方が適用される:
・ピクチャーにおける最後のCTU行に位置しないCTU(たとえば、CTUの下部境界がピクチャーの下部境界ではない、またはピクチャーの下部境界を越える)については、ALF仮想境界が有効にされる。すなわち、1つのCTUが2つ以上の部分に分割されてもよく、1つの部分のサンプルが別の部分のサンプルを使用することはできない。
・ピクチャーにおける最後のCTU行に位置するCTU(たとえば、CTUの下部境界がピクチャーの下部境界である、またはピクチャーの下部境界を越える)については、ALF仮想境界が有効にされる。すなわち、1つのCTUが2つ以上の部分に分割されてもよく、1つの部分のサンプルが別の部分のサンプルを使用することはできない。
・1つの境界(または複数種類の境界)におけるサンプルについて、その境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために、片側パディングが実行される。
・CTU境界と一致するスライス/タイル/ブリック/サブピクチャー境界または「360仮想境界」である1つの境界(または複数種類の境界)におけるサンプルについては、境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために両側パディングが実行される。
・CTU境界と一致しないピクチャー境界または「360仮想境界」である1つの境界(または複数種類の境界)におけるサンプルについては、境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために片側パディングが実行される。
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタリングされ再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・filtIdx[x][y]によって指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]およびルーマ・クリッピング値の配列c[j]は、j=0..11として、次のように導出される:
vy+j=Clip3(SubPicTopBoundaryPos,SubPicBotBoundaryPos,vy+j) (8-1184)
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうちの一つまたは複数が真である場合、applyVirtualBoundaryは0に設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在の符号化ツリー・ブロックの下部境界はブリックの下部境界であり、loop_filter_across_bricks_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの下部境界はスライスの下部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの下部境界はサブピクチャーの下部境界であり、位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]は0に等しい。
・現在の符号化ツリー・ブロックの下部境界は、ピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagは1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。]]
・再構成されたサンプル・オフセットr1,r2,r3は、水平ルーマ・サンプル位置yおよびclipTopPosおよびclipBottomPos[[applyVirtualBoundary]]に従って、テーブル8-24において指定される。
・再構成されたサンプル・オフセットc1,c2,c3は、垂直ルーマ・サンプル位置xおよびclipLeftPosおよびclipRightPosに従って、テーブル8-25において指定される。
・変数currは次のように導出される:
curr=recPictureL[hx,vy] (8-1203)
このプロセスの入力は以下の通り:
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)、
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL。
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundies-1についてxCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1208)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundies-1についてPpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく6より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1209)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1210)
・[[位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
hx+i=Clip3(SubPicLeftBoundaryPos,SubPicRightBoundaryPos,hx+i) (8-1184)]]
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundies-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1211)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundies-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1212)
・それ以外の場合、次が適用される:
・yCtb+CtbSizeYがpic_height_in_luma_samples以上である場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・[[それ以外の場合、yがCtbSizeY-4より小さい場合、次が適用される:
vy+j=Clip3(0,yCtb+CtbSizeY-5,yCtb+y+j) (8-1214)
・それ以外の場合、次が適用される:
vy+j=Clip3(yCtb+CtbSizeY-4,pic_height_in_luma_samples-1,yCtb+y+j) (8-1215)
・位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
vy+j=Clip3(SubPicTopBoundaryPos,SubPicBotBoundaryPos,vy+j) (8-1184)]]
・clipTopPosが-128に等しくない場合、次が適用される:
v y+j =Clip3(clipTopPos,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・clipBottomPosが-128に等しくない場合、次が適用される:
v y+j =Clip3(0,clipBottomPos-1,yCtb+y+j) (8-1213)
・clipLeftPosが-128に等しくない場合、次が適用される:
h x+i =Clip3(clipLeftPos,pic_width_in_luma_samples-1,xCtb+x+i) (8-1213)
・clipRightPosが-128に等しくない場合、次が適用される:
h x+i =Clip3(0,clipRightPos-1,xCtb+x+i) (8-1213)〕
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、またはxとyの両方が不均一な数である場合、次が適用される:
2. [[変数minY、maxYおよびacは次のように導出される:
・(y<<2)が(CtbSizeY-8)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acは96に等しく設定される。
・それ以外の場合、(y<<2)が(CtbSizeY-4)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。]]
3. 変数sumH[x][y]、sumV[x][y]、sumD0[x][y]、sumD1[x][y]、sumOfHV[x][y]は、x、y=0..(CtbSizeY-1)>>2として、次のように導出される:
varTab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4} (8-1242)
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*ac)>>(3+BitDepthY))] (8-1243)
6. 分類フィルタ・インデックス配列filtIdx[x][y]および転置インデックス配列transposeIdx[x][y]は、x=y=0..CtbSizeY-1として、次のように導出される:
transposeTable[ ]={0,1,0,2,2,3,1,3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0に等しくない場合、filtIdx[x][y]は次のように修正される:
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5 (8-1244)
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマ符号化ツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1245)
ctbHeightC=CtbSizeY/SubHeightC (8-1246)
フィルタリングされた再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマ符号化ツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1、y=0..ctbHeightC-1として、次のようにフィルタリングされる:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
vy+j=Clip3(SubPicTopBoundaryPos/SubWidthC,SubPicBotBoundaryPos/SubWidthC,vy+j) (8-1184)
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうち一つまたは複数が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がサブピクチャーの下部境界であり、位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい。
・現在の符号化ツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。]]
・変数clipTopPosは、clipLeftPos/SubWidthCに等しく設定される。
・変数clipBottomPosは、clipRightPos/SubWidthCに等しく設定される。
・変数clipTopPosは、clipTopPos/SubWidthCに等しく設定される。
・変数clipBottomPosは、clipBottomPos/SubWidthCに等しく設定される。
・再構成されたサンプル・オフセットr1およびr2は、水平ルーマ・サンプル位置y、clipTopPosおよびclipBottomPos[[およびapplyVirtualBoundary]]に従ってテーブル8-27において指定される。
・再構成されたサンプル・オフセットc1およびc2は、垂直ルーマ・サンプル位置x、clipLeftPosおよびclipRightPosに従ってテーブル8-28において指定される。
・変数currは次のように導出される:
curr=recPicture[hx,vy] (8-1253)
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][j] (8-1254)
c[j]=AlfClipC[slice_alf_aps_id_chroma][j] (8-1255)
・変数sumは次のように導出される:
・pcm_loop_filter_disabled_flagおよびpcm_flag[(xCtbC+x)*SubWidthC][(yCtbC+y)*SubHeightC]が両方とも1に等しい場合、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=recPictureL[hx,vy] (8-1258)
・それ以外の場合(pcm_loop_filter_disabled_flagが0に等しい、またはpcm_flag[x][y]が0に等しい)、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum) (8-1259)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・現在のルーマ符号化ツリー・ブロックの左上のサンプルに対して現在のサンプルを指定するルーマ位置(x,y)。
このプロセスの出力は以下の通り:
・左垂直境界位置clipLeftPos
・右垂直境界位置clipRightPos
・上水平境界位置clipTopPos
・下水平境界位置clipBottomPos
変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPosは-128に設定される。
変数clipTopPosは次のように修正される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、y-(CtbSizeY-4)が0以上である場合、変数clipTopPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1または0に等しくなく、yCtb+y-PpsVirtualBoundariesPosY[n]が任意のn=0..pps_num_hor_virtual_boundaries-1について0以上3未満である場合、次が適用される:
clipTopPos=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、yが3未満であり、現在の符号化ツリー・ブロックの上部境界がピクチャーの上部境界ではなく、次の条件のいずれかが真である場合、変数clipTopPosはyCtbに等しく設定される:
・現在の符号化ツリー・ブロックの上部境界がブリックの上部境界である場合、loop_filter_across_bricks_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの上部境界がスライスの上部境界である場合、loop_filter_across_slices_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの上部境界が、サブピクチャーの上部境界に等しい場合、loop_filter_across_sub_pic_enabled_flagは0に等しい。
変数clipBottomPosは次のように修正される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、CtbSizeY-4-yが0より大きく4より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1または0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが任意のn=0..pps_num_hor_virtual_boundaries-1について0より大きく4より小さい場合、次が適用される:
clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、CtbSizeY-yが4未満であり、現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、次の条件のうちの1つが真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しく設定される。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がサブピクチャーの下部境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。
変数clipLeftPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYは0に等しく、PpsVirtualBoundariesPosX[n]はpic_width_in_luma_samples-1または0に等しくなく、xCtb+x-PpsVirtualBoundariesPosX[n]は任意のn=0..pps_num_ver_virtual_boundaries-1について0以上3未満である場合、次が適用される:
clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1201)
・それ以外の場合、xが3未満であり、現在の符号化ツリー・ブロックの左境界がピクチャーの左境界ではなく、次の条件のうちいずれかが真である場合、変数clipLeftPosはxCtbに等しく設定される。
・現在の符号化ツリー・ブロックの左境界がブリックの左境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの左境界がスライスの左境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの左境界がサブピクチャーの左境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。
変数clipRightPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYは0に等しく、PpsVirtualBoundariesPosX[n]はpic_width_in_luma_samples-1または0に等しくなく、PpsVirtualBoundariesPosX[n]-xCtb-xは任意のn=0..pps_num_ver_virtual_boundaries-1について0より大きく4より小さい場合、次が適用される:
clipRightPos=PpsVirtualBoundariesPosX[n] (8-1201)
・それ以外の場合、CtbSizeY-xが4未満であり、現在の符号化ツリー・ブロックの右境界がピクチャーの右境界ではなく、次の条件のうちの1つが真である場合、変数clipRightPosはxCtb+CtbSizeYに等しく設定される。
・現在の符号化ツリー・ブロックの右境界がブリックの右境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの右境界がスライスの右境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの右境界がサブピクチャーの右境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。〕
この実施形態では、以下の主な考え方が適用される:
・ピクチャーにおける最後のCTU行に位置しないCTU(たとえば、CTUの下部境界がピクチャーの下部境界ではない、またはピクチャーの下部境界を越える)については、ALF仮想境界が有効にされる。すなわち、1つのCTUが2つ以上の部分に分割されてもよく、1つの部分のサンプルが別の部分のサンプルを使用することはできない。
・ピクチャーにおける最後のCTU行に位置するCTU(たとえば、CTUの下部境界がピクチャーの下部境界である、またはピクチャーの下部境界を越える)については、ALF仮想境界が有効にされる。すなわち、1つのCTUが2つ以上の部分に分割されてもよく、1つの部分のサンプルが別の部分のサンプルを使用することはできない。
・1つの境界(または複数種類の境界)におけるサンプルについて、その境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために、片側パディングが実行される。
・CTU境界と一致するスライス/タイル/ブリック/サブピクチャー境界または「360仮想境界」である1つの境界(または複数種類の境界)におけるサンプルについては、境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために両側パディングが実行される。
・CTU境界と一致しないピクチャー境界または「360仮想境界」である1つの境界(または複数種類の境界)におけるサンプルについては、境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために片側パディングが実行される。
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタリングされ再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・filtIdx[x][y]によって指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]およびルーマ・クリッピング値の配列c[j]は、j=0..11として、次のように導出される:
・以下の条件のうちの一つまたは複数が真である場合、applyVirtualBoundaryは0に設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在の符号化ツリー・ブロックの下部境界はブリックの下部境界であり、loop_filter_across_bricks_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの下部境界はスライスの下部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの下部境界はサブピクチャーの下部境界であり、位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]は0に等しい。
・現在の符号化ツリー・ブロックの下部境界は、ピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagは1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。]]
curr=recPictureL[hx,vy] (8-1203)
このプロセスの入力は以下の通り:
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)、
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL。
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundies-1についてxCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1208)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundies-1についてPpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく6より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1209)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1210)
・[[位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
hx+i=Clip3(SubPicLeftBoundaryPos,SubPicRightBoundaryPos,hx+i) (8-1184)]]
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundies-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1211)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1212)
・それ以外の場合、次が適用される:
・[[yCtb+CtbSizeYがpic_height_in_luma_samples以上である場合、次が適用される:]]
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・[[それ以外の場合、yがCtbSizeY-4より小さい場合、次が適用される:
vy+j=Clip3(0,yCtb+CtbSizeY-5,yCtb+y+j) (8-1214)
・それ以外の場合、次が適用される:
vy+j=Clip3(yCtb+CtbSizeY-4,pic_height_in_luma_samples-1,yCtb+y+j) (8-1215)
・位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
vy+j=Clip3(SubPicTopBoundaryPos,SubPicBotBoundaryPos,vy+j) (8-1184)]]
・変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPosは、ALF境界位置導出プロセスを(xCtb,yCtb)および(x,y)を用いて呼び出すことによって導出される。
・clipTopPosが-128に等しくない場合、次が適用される:
v y+j =Clip3(clipTopPos,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・clipBottomPosが-128に等しくない場合、次が適用される:
v y+j =Clip3(0,clipBottomPos-1,yCtb+y+j) (8-1213)
・clipLeftPosが-128に等しくない場合、次が適用される:
h x+i =Clip3(clipLeftPos,pic_width_in_luma_samples-1,xCtb+x+i) (8-1213)
・clipRightPosが-128に等しくない場合、次が適用される:
h x+i =Clip3(0,clipRightPos-1,xCtb+x+i) (8-1213)
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、またはxとyの両方が不均一な数である場合、次が適用される:
2. [[変数minY、maxYおよびacは次のように導出される:
・(y<<2)が(CtbSizeY-8)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acは96に等しく設定される。
・それ以外の場合、(y<<2)が(CtbSizeY-4)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。]]
・変数minYおよびmaxYは次のように導出される:
・clipTopPosが-128に等しくなく、clipBottomPosが-128に等しい場合は、次が適用される:
■(y<<2)がclipTopPosに等しい場合、minYは0に等しく、maxYは5に等しく設定される。
・それ以外の場合、clipTopPosが-128に等しく、clipBottomPosが-128に等しくない場合は、次が適用される:
■(y<<2)が(clipBottomPos-4)に等しい場合、minYは-2に等しく設定され、maxYは3に等しく設定される。
・それ以外の場合、clipTopPosが-128に等しくなく、clipBottomPosが-128に等しくない場合は、次が適用される:
■minYは0に等しく設定され、maxYは3に等しく設定される。
・それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され[[acは64に等しく設定され]]る。
・変数minX、maxXおよびacは、次のように導出される:
・clipLeftPosが-128に等しくない場合は、次が適用される:
■(x<<2)がclipLeftPosに等しい場合、minXは0に等しく設定され、maxXは5に等しく設定される。
・それ以外の場合、clipRightPosが-128と等しくない場合、次が適用される:
■(x<<2)が(clipRightPos-4)に等しい場合、minXは-2に等しく設定され、maxXは3に等しく設定される。
・それ以外の場合、minXは-2に等しく設定され、maxXは5に等しく設定される。
・変数acは次のように導出される:
varTab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4} (8-1242)
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*ac)>>(3+BitDepthY))] (8-1243)
6. 分類フィルタ・インデックス配列filtIdx[x][y]および転置インデックス配列transposeIdx[x][y]は、x=y=0..CtbSizeY-1として、次のように導出される:
transposeTable[ ]={0,1,0,2,2,3,1,3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0に等しくない場合、filtIdx[x][y]は次のように修正される:
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5 (8-1244)
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマ符号化ツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1245)
ctbHeightC=CtbSizeY/SubHeightC (8-1246)
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1についてxCtbC+x-PpsVirtualBoundariesPosX[n]/SubWidthCが0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n]/SubWidthC,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1247)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、任意のn=0..pps_num_ver_virtual_boundaries-1についてPpsVirtualBoundariesPosX[n]/SubWidthC-xCtbC-xが0より大きく3より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]/SubWidthC-1,xCtbC+x+i) (8-1248)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1249)
・[[位置(hx,hy)におけるルーマ・サンプルを含むサブピクチャーについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
hx+i=Clip3(SubPicLeftBoundaryPos/SubWidthC,SubPicRightBoundaryPos/SubWidthC,h{x+i}) (8-1184)]]
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundaries-1についてyCtbC+y-PpsVirtualBoundariesPosY[n]/SubHeightCが0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n]/SubHeightC,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1250)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundaries-1についてPpsVirtualBoundariesPosY[n]/SubHeightC-yCtbC-yが0より大きく3より小さい場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]/SubHeightC-1,yCtbC+y+j) (8-1251)
・それ以外の場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1252)
・[[位置(hx,hy)におけるルーマ・サンプルを含むサブピクチャーについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
vy+j=Clip3(SubPicTopBoundaryPos/SubWidthC,SubPicBotBoundaryPos/SubWidthC,vy+j) (8-1184)
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうち一つまたは複数が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在の符号化ツリー・ブロックの下部境界がサブピクチャーの下部境界であり、位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい。
・現在の符号化ツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。]]
・変数clipLeftPosは、clipLeftPos/SubWidthCに等しく設定される。
・変数clipRightPosは、clipRightPos/SubWidthCに等しく設定される。
・変数clipTopPosは、clipTopPos/SubWidthCに等しく設定される。
・変数clipBottomPosは、clipBottomPos/SubWidthCに等しく設定される。
・再構成されたサンプル・オフセットr1およびr2は、[[水平ルーマ]]垂直クロマ・サンプル位置y、clipTopPosおよびclipBottomPos[[およびapplyVirtualBoundary]]に従ってテーブル8-27において指定される。
・サンプル位置オフセットc1およびc2は、水平クロマ・サンプル位置x、cxlipLeftPosおよびclipRightPosに従ってテーブル8-28において指定される。
・変数currは次のように導出される:
curr=recPicture[hx,vy] (8-1253)
・クロマ・フィルタ係数の配列f[j]とクロマ・クリッピング値の配列c[j]は、j=0..5として、次のように導出される:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][j] (8-1254)
c[j]=AlfClipC[slice_alf_aps_id_chroma][j] (8-1255)
・pcm_loop_filter_disabled_flagおよびpcm_flag[(xCtbC+x)*SubWidthC][(yCtbC+y)*SubHeightC]が両方とも1に等しい場合、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=recPictureL[hx,vy] (8-1258)
・それ以外の場合(pcm_loop_filter_disabled_flagが0に等しい、またはpcm_flag[x][y]が0に等しい)、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum) (8-1259)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・現在のルーマ符号化ツリー・ブロックの左上のサンプルに対して現在のサンプルを指定するルーマ位置(x,y)。
このプロセスの出力は以下の通り:
・左垂直境界位置clipLeftPos
・右垂直境界位置clipRightPos
・上水平境界位置clipTopPos
・下水平境界位置clipBottomPos
変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPosは-128に設定される。
変数clipTopPosは次のように修正される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、y-(CtbSizeY-4)が0以上である場合、変数clipTopPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、yCtb+y-PpsVirtualBoundariesPosY[n]が任意のn=0..pps_num_hor_virtual_boundaries-1について0以上3未満である場合、次が適用される:
clipTopPos=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、yが3未満であり、現在の符号化ツリー・ブロックの上部境界がピクチャーの上部境界ではなく、次の条件のいずれかが真である場合、変数clipTopPosはyCtbに等しく設定される:
・現在の符号化ツリー・ブロックの上部境界がブリックの上部境界である場合、loop_filter_across_bricks_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの上部境界がスライスの上部境界である場合、loop_filter_across_slices_enabled_flagは0に等しい。
・現在の符号化ツリー・ブロックの上部境界が、サブピクチャーの上部境界に等しい場合、loop_filter_across_sub_pic_enabled_flagは0に等しい。
変数clipBottomPosは次のように修正される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、CtbSizeY-4-yが0より大きく4より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosY[n]-yCtb-yが任意のn=0..pps_num_hor_virtual_boundaries-1について0より大きく4より小さい場合、次が適用される:
clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、CtbSizeY-yが4未満であり、現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、次の条件のうちの1つが真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しく設定される。
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がサブピクチャーの下部境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。
変数clipLeftPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYは0に等しく、xCtb+x-PpsVirtualBoundariesPosX[n]は任意のn=0..pps_num_ver_virtual_boundaries-1について0以上3未満である場合、次が適用される:
clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1201)
・それ以外の場合、xが3未満であり、現在の符号化ツリー・ブロックの左境界がピクチャーの左境界ではなく、次の条件のうち一つまたは複数が真である場合、変数clipLeftPosはxCtbに等しく設定される。
・現在の符号化ツリー・ブロックの左境界がブリックの左境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの左境界がスライスの左境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの左境界がサブピクチャーの左境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。
変数clipRightPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYは0に等しく、PpsVirtualBoundariesPosX[n]-xCtb-xは任意のn=0..pps_num_ver_virtual_boundaries-1について0より大きく4より小さい場合、次が適用される:
clipRightPos=PpsVirtualBoundariesPosX[n] (8-1201)
・それ以外の場合、CtbSizeY-xが4未満であり、現在の符号化ツリー・ブロックの右境界がピクチャーの右境界ではなく、次の条件のうちの一つまたは複数が真である場合、変数clipRightPosはxCtb+CtbSizeYに等しく設定される。
・現在の符号化ツリー・ブロックの右境界がブリックの右境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの右境界がスライスの右境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの右境界がサブピクチャーの右境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。〕
8.8.5.2 ルーマ・サンプルについての符号化ツリー・ブロック・フィルタリング・プロセス
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタ処理され再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
……
・i,j=-3..3として、ルーマ・サンプルの所与の配列recPicture内の対応するルーマ・サンプル(x,y)のそれぞれについての位置(hx+i,vy+j)は次のように導出される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1について、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上3未満である場合:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1229)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1について、PpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく4未満である場合:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1230)
・それ以外の場合は、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1231)
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、かつPpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、かつ任意のn=0..pps_num_hor_virtual_boundaries-1について、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1232)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_bourdariesについてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1233)
・それ以外の場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1234)
・変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、clipTopRightFlag、clipBottomLeftFlag、clipBottomRightFlagは、8.8.5.5項で指定したALF境界位置導出プロセスを(xCtb,yCtb)と(x,y)を入力として呼び出すことにより導出される。
・水平サンプル位置オフセットx1、x2、x3は、水平ルーマ・サンプル位置x、clipLeftPos、およびclipRightPosに応じてテーブル8-21において指定される。
……
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプルアレイrecPictureL
このプロセスの出力は以下の通り:
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]
i,j=-2..5として、ルーマ・サンプルの所与の配列recPicture内の対応するルーマサンプル(x,y)のそれぞれの位置(hx+i,vy+j)は、次のように導出される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1239)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosX[n]-xCtbが0より大きく6未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1240)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1241)
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1242)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1243)
・それ以外の場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1244)
・変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、clipTopRightFlag、clipBottomLeftFlag、clipBottomRightFlagは、8.8.5.5項で指定したALF境界位置導出プロセスを(xCtb,yCtb)と(x,y)を入力として呼び出すことにより導出される。
・clipTopPosが-128に等しくない場合は、次が適用される:
vy+j=Clip3(clipTopPos,pic_height_in_luma_samples-1,yCtb+y+j) (8-1245)
・clipBottomPosが-128に等しくない場合は、次が適用される:
vy+j=Clip3(0,clipBottomPos-1,yCtb+y+j) (8-1246)
・clipLeftPosが-128に等しくない場合は、次が適用される:
hx+i=Clip3(clipLeftPos,pic_width_in_luma_samples-1,xCtb+x+i) (8-1247)
・clipRightPosが-128と等しくない場合は、次が適用される:
hx+i=Clip3(0,clipRightPos-1,xCtb+x+i) (8-1248)
h x+i =xCtb (8-1245)
v y+j =yCtb (8-1245)
・clipTopRightFlagが真に等しい場合、(h x+i >=xCtb+CtbLog2SizeY)&&(v y+j <yCtb)であれば、次が適用される:
h x+i =xCtb+CtbLog2SizeY-1 (8-1245)
v y+j =yCtb (8-1245)
・clipBottomLeftFlagが真に等しい場合、(h x+i <xCtb)&&(v y+j >=yCtb+CtbLog2SizeY)であれば、次が適用される:
h x+i =xCtb (8-1245)
v y+j =yCtb+CtbLog2SizeY-1 (8-1245)
・clipBottomRightFlagが真に等しい場合、(h x+i >=xCtb+CtbLog2SizeY)&&(v y+j >=yCtb+CtbLog2SizeY)であれば、次が適用される:
h x+i =xCtb+CtbLog2SizeY-1 (8-1245)
v y+j =yCtb+CtbLog2SizeY-1 (8-1245)
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、xとyの両方が偶数ではない場合、次が適用される:
……
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマ符号化ツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1278)
ctbHeightC=CtbSizeY/SubHeightC (8-1279)
フィルタ処理された再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマ符号化ツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1、y=0..ctbHeightC-1として、次のようにフィルタリングされる:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、xCtbC+x-PpsVirtualBoundariesPosX[n]/SubWidthCが0以上2未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n]/SubWidthC,
pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1280)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosX[n]/SubWidthC-xCtbC-xが0より大きく3未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]/SubWidthC-1,xCtbC+x+i) (8-1281)
・それ以外の場合は、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1282)
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、yCtbC+y-PpsVirtualBoundariesPosY[n]/SubHeightCが0以上2未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n]/SubHeightC,
pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1283)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]/SubHeightC-yCtbC-yが0より大きく3より小さい場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]/SubHeightC-1,yCtbC+y+j) (8-1284)
・それ以外の場合は、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1285)
・clipTopLeftFlagが真に等しい場合、(h x+i <xCtbC)&&(v y+j <yCtbC)であれば、次が適用される:
h x+i =xCtbC (8-1245)
v y+j =yCtbC (8-1245)
・clipTopRightFlagが真に等しい場合、(h x+i >=xCtbC+CtbLog2SizeY/SubWidthC)&&(v y+j <yCtbC)であれば、次が適用される:
h x+i =xCtbC+CtbLog2SizeY/SubWidthC-1 (8-1245)
v y+j =yCtbC (8-1245)
・clipBottomLeftFlagが真に等しい場合、(h x+i <xCtbC)&&(v y+j >=yCtbC+CtbLog2SizeY/SubHeightC)であれば、次が適用される:
h x+i =xCtbC (8-1245)
v y+j =yCtbC+CtbLog2SizeY/SubHeightC-1 (8-1245)
・clipBottomRightFlagが真に等しい場合、(h x+i >=xCtbC+CtbLog2SizeY/SubWidthC)&&(v y+j >=yCtbC+CtbLog2SizeY/SubHeightCであれば、次が適用される:
h x+i =xCtbC+CtbLog2SizeY/SubWidthC-1 (8-1245)
v y+j =yCtbC+CtbLog2SizeY/SubHeightC-1 (8-1245)
・変数clipLeftPosはclipLeftPos/SubWidthCに等しく設定される。
・変数clipRightPosは、clipRightPos/SubWidthCに等しく設定される。
・変数clipTopPosはclipTopPos/SubHeightCに等しく設定される。
・変数clipBottomPosはclipBottomPos/SubHeightCに等しく設定される。
……
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・現在のルーマ符号化ツリー・ブロックの左上のサンプルに対して現在のサンプルを指定するルーマ位置(x,y)。
このプロセスの出力は以下の通り;
・左垂直境界位置clipLeftPos、
・右垂直境界位置clipRightPos、
・上水平境界位置clipTopPos、
・下水平境界位置clipBottomPos
・左上境界フラグclipTopLeftFlag
・右上境界フラグclipTopRightFlag
・左下境界フラグclipBottomLeftFlag
・右下境界フラグclipBottomRightFlag
変数clipTopLeftFlag、clipTopRightFlag、clipBottomLeftFlag、clipBottomRightFlagは偽(false)に等しく設定される。
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、y-(CtbSizeY-4)が0以上の場合、変数clipTopPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
clipTopPos=PpsVirtualBoundariesPosY[n] (8-1292)
・それ以外の場合、yが3未満で、現在の符号化ツリー・ブロックの上部境界がピクチャーの上部境界ではなく、次の条件のうちの一つまたは複数が真である場合、変数clipTopPosはyCtbに等しく設定される:
・現在の符号化ツリー・ブロックの上部境界がブリックの上部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合、
・現在の符号化ツリー・ブロックの上部境界がスライスの上部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合、
・現在の符号化ツリー・ブロックの上部境界がサブピクチャーの上部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、CtbSizeY-4-yが0より大きく4より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1もしくは0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4より小さい場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1293)
・それ以外の場合で、CtbSizeY-yが4未満であり、現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、次の条件のうちの一つまたは複数が真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がサブピクチャーの下部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipLeftPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上3未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1294)
・それ以外の場合で、xが3より小さく、現在の符号化ツリー・ブロックの左境界はピクチャーの左境界ではなく、次の条件のうちの一つまたは複数が真である場合、変数clipLeftPosはxCtbに等しく設定される:
・現在の符号化ツリー・ブロックの左境界がブリックの左境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの左境界がスライスの左境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの左境界がサブピクチャーの左境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipRightPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく4未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
clipRightPos=PpsVirtualBoundariesPosX[n] (8-1295)
・それ以外の場合、CtbSizeY-xが4未満であり、現在の符号化ツリー・ブロックの右境界がピクチャーの右境界ではなく、以下の条件のうちの一つまたは複数が真である場合、変数clipRightPosはxCtb+CtbSizeYに等しく設定される:
・現在の符号化ツリー・ブロックの右境界がブリックの右境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの右境界がスライスの右境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの右境界がサブピクチャーの右境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・次の条件のうちの一つまたは複数が真の場合、変数clipTopLeftFlagはtrueに等しく設定される:
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb-CtbSizeY,yCtb-CtbSizeY)をカバーする符号化ツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb-CtbSizeY,yCtb-CtbSizeY)をカバーする符号化ツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb-CtbSizeY,yCtb-CtbSizeY)をカバーする符号化ツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipTopRightFlagは次のように修正される:
・次の条件のうちの一つまたは複数が真の場合、変数clipTopRightFlagはtrueに等しく設定される:
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+CtbSizeY,yCtb-CtbSizeY)をカバーする符号化ツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+CtbSizeY,yCtb-CtbSizeY)をカバーする符号化ツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+CtbSizeY,yCtb-CtbSizeY)をカバーする符号化ツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipBottomLeftFlagは次のように修正される:
・次の条件のうちの一つまたは複数が真の場合、変数clipBottomLeftFlagは真に等しく設定される:
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb-CtbSizeY,yCtb+CtbSizeY)をカバーする符号化ツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb-CtbSizeY,yCtb+CtbSizeY)をカバーする符号化ツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb-CtbSizeY,yCtb+CtbSizeY)をカバーする符号化ツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipBottomRightFlagは次のように修正される:
・次の条件のうちの一つまたは複数が真の場合、変数clipBottomRightFlagは真に等しく設定される:
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+CtbSizeY,yCtb+CtbSizeY)をカバーする符号化ツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+CtbSizeY,yCtb+CtbSizeY)をカバーする符号化ツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+CtbSizeY,yCtb+CtbSizeY)をカバーする符号化ツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
本実施形態では、以下の諸方法が以下のように実装される。
・パディング・プロセスが、現在のALF処理単位内のサンプルのみを使用する
・ALF仮想境界を除くすべての境界について、繰り返しパディングを適用する(ミラー・パディングを適用する)
・ピクチャー高さがCTUサイズの整数倍である場合、ALF VBを最後のCTU行に適用する。
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプルアレイrecPictureL、
・フィルタ処理された再構成されたルーマピクチャーサンプルアレイalfPictureL、
・現在のピクチャーの左上のサンプルに対して現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
このプロセスの出力は、修正されたフィルタリングされた再構成されたルーマピクチャーサンプルアレイalfPictureLである。
8.8.5.3節のフィルタ・インデックスの導出プロセスは、x,y=0..CtbSizeY-1として、位置(xCtb,yCtb)と再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureLを入力とし、filtIdx[x][y]およびtransposeIdx[x][y]を出力として呼び出される。
フィルタリングされた再構成されたルーマ・サンプルalfPictureL[x][y]の導出のために、現在のルーマ符号化ツリー・ブロックrecPictureL[x][y]内の各再構成されたルーマ・サンプルは、x,y=0..CtbSizeY-1として、次のようにフィルタリングされる。
・j=0..11として、filtIdx[x][y]で指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]と、ルーマ・クリッピング値の配列c[j]は、次のように導出される:
・AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]が16未満である場合、次が適用される:
i=AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY] (8-1219)
f[j]=AlfFixFiltCoeff[AlfClassToFiltMap[i][filtIdx[x][y]]][j] (8-1220)
c[j]=2BitdepthY (8-1221)
・それ以外の場合(AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]が16以上)、次が適用される:
i=slice_alf_aps_id_luma[AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]-16] (8-1222)
f[j]=AlfCoeffL[i][filtIdx[x][y]][j] (8-1223)
c[j]=AlfClipL[i][filtIdx[x][y]][j] (8-1224)
・ルーマ・フィルタ係数およびクリッピング値インデックスidxは、transposeIdx[x][y]に依存して、次のように導出される:
・transposeIndex[x][y]が1に等しい場合、次が適用される:
idx[]={9,4,10,8,1,5,11,7,3,0,2,6} (8-1225)
・それ以外の場合で、transposeIndex[x][y]が2に等しい場合、次が適用される:
idx[]={0,3,2,1,8,7,6,5,4,9,10,11} (8-1226)
・それ以外の場合で、transposeIndex[x][y]が3に等しい場合、次が適用される:
idx[]={9,8,10,4,3,7,11,5,1,0,2,6} (8-1227)
・それ以外の場合は、次が適用される:
idx[]={0,1,2,3,4,5,6,7,8,9,10,11} (8-1228)
・i,j=-3..3のルーマ・サンプルの所与の配列recPicture内の対応するルーマサンプル(x,y)のそれぞれの位置(hx+i,vy+j)は以下のように導かれる:
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1について、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上3未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1229)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1について、PpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく4未満である場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1230)
・それ以外の場合は、次が適用される:]]
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1231)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、かつPpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、かつ任意のn=0..pps_num_hor_virtual_boundaries-1について、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1232)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_bourdaries-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1233)
・それ以外の場合、次が適用される:]]
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1234)
・変数h x+i およびv y+j は、(xCtb,yCtb)、(h x+i ,v y+j )、0,clipLeftPos,clipRightPos,clipTopPos,clipBottomPos,clipTopLeftFlag、clipBotRightFlagを入力として、8.8.5.6節に指定されているALFサンプル・パディング・プロセスを呼び出すことによって修正される。
・[[垂直サンプル位置のオフセットy1、y2、y3は、垂直ルーマ・サンプル位置y、clipLeftPos、およびclipRightPosに従ってテーブル8-20において指定される。
・水平サンプル位置オフセットx1、x2、x3は、水平ルーマ・サンプル位置x、clipLeftPos、clipRightPosに従ってテーブル8-21において指定される。]]
・変数currは次のように導出される:
curr=recPicture L [h x ,v y ] (8-1235)
・変数applyVirtualBoundaryは、次のように導出される:
・現在の符号化ツリー・ブロックの下部境界が現在のピクチャーの下部境界であり、pic_height_in_luma_samples-yCtb<=CtbSizeY-4である場合、applyVirtualBoundaryは0に等しく設定される:
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。
・再構成されたサンプル・オフセットy1、y2、y3は、ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
alfPictureL[xCtb+x][yCtb+y]=Clip3(0,(1<<BitDepthY)-1,sum) (8-1238)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマピクチャー・サンプルアレイrecPictureL。
このプロセスの出力は以下の通り:
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]
・変数x4とy4は、x<<2とy<<2として設定される。
・変数applyVirtualBoundary,minY,maxY,ac[x][y]は次のように導出される:
・y4が(CtbSizeY-8)に等しく、次の条件のうちのいずれかが真の場合、minYは-2に等しく設定され、maxYは3に等しく設定され、applyVirtualBoundaryは1に等しく設定され、ac[x][y]は96に等しく設定される。
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界であり、pic_height_in_luma_samples-yCtb>CtbSizeY-4である場合
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界でない場合
・それ以外の場合で、y4が(CtbSizeY-4)に等しく、次の条件のいずれかが真の場合、minYは0に等しく設定され、maxYは5に等しく設定され、applyVirtualBoundaryは1に等しく設定され、ac[x][y]は96に等しく設定される。
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界であり、pic_height_in_luma_samples-yCtb>CtbSizeY-4である場合
現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界でない場合
・それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され、applyVirtualBoundaryは0に等しく設定され、ac[x][y]は64に等しく設定される。
・変数blkXは(x4<<2)に等しく設定され、blkYは(y4<<2)に等しく設定される。
・i,j=-3.3,x=blkX..blkX+3,y=blkY..blkY+3として、位置(h x+i ,v y+j )は次のように導出される:
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1239)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosX[n]-xCtbが0より大きく6未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1240)
・それ以外の場合、次が適用される:]]
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1241)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1242)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1243)
・それ以外の場合、次が適用される:]]
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1244)
・変数h x+i およびv y+j は、(xCtb,yCtb),(h x+i ,v y+j ),0,clipLeftPos,clipRightPos,clipTopPos,clipBottomPos,clipTopLeftFlagandclipBotRightFlagを入力として、8.5.5.6項に指定されるALFサンプル・パディング・プロセスを呼び出すことによって修正される。
・[[変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPosは、8.8.5.5項で指定したALF境界位置導出プロセスを(xCtb,yCtb)と(x,y)を入力として呼び出すことにより導出される。
・clipTopPosが-128に等しくない場合は、次が適用される:
vy+j=Clip3(clipTopPos,pic_height_in_luma_samples-1,yCtb+y+j) (8-1245)
・clipBottomPosが-128に等しくない場合は、次が適用される:
vy+j=Clip3(0,clipBottomPos-1,yCtb+y+j) (8-1246)
・clipLeftPosが-128に等しくない場合は、次が適用される:
hx+i=Clip3(clipLeftPos,pic_width_in_luma_samples-1,xCtb+x+i) (8-1247)
・clipRightPosが-128と等しくない場合は、次が適用される:
hx+i=Clip3(0,clipRightPos-1,xCtb+x+i) (8-1248)
分類フィルタ・インデックス・アレイfiltIdxおよび転置インデックス・アレイtransposeIdxは、以下の順序付けられたステップによって導出される:]]
・[[x]]iと[[y]]jの両方が偶数であるか、[[x]]iと[[y]]jの両方が偶数ではない場合、次が適用される:
[[ filtH[x][y]=Abs((recPicture[hx,vy]<<1)-recPicture[hx-1,vy]-recPicture[hx+1,vy]) (8-1249)
filtV[x][y]=Abs((recPicture[hx,vy]<<1)-recPicture[hx,vy-1]-recPicture[hx,vy+1]) (8-1250)
filtD0[x][y]=Abs((recPicture[hx,vy]<<1)-recPicture[hx-1,vy-1]-recPicture[hx+1,vy+1]) (8-1251)
filtD1[x][y]=Abs((recPicture[hx,vy]<<1)-recPicture[hx+1,vy-1]-recPicture[hx-1,vy+1])]] (8-1252)]]
filtH[x+i][y+j]=Abs((recPicture[h x+i ,v y+j ]<<1)-recPicture[h x+i-1 ,v y+j ]-recPicture[h x+i+1 ,v y+j ]) (8-1249)
filtV[x+i][y+j]=Abs((recPicture[h x+i ,v y+j ]<<1)-recPicture[h x+i ,v y+j-1 ]-recPicture[h x+i ,v y+j+1 ]) (8-1250)
filtD0[x+i][y+j]=Abs((recPicture[h x+i ,v y+j ]<<1)-recPicture[h x+i-1 ,v y+j-1 ]-recPicture[h x+i+1 ,v y+j+1 ]) (8-1251)
filtD1[x+i][y+j]=Abs((recPicture[h x+i ,v y+j ]<<1)-recPicture[h x+i+1 ,v y+j-1 ]-recPicture[h x+i-1 ,v y+j+1 ]) (8-1252)
・それ以外の場合、filtH[x+i][y+j]、filtV[x+i][y+j]、filtD0[x+i][y+j]、filtD1[x+i][y+j]は0に設定される。
・変数minY、maxYおよびacは次のように導出される:
・clipTopPosが-128に等しくなく、clipBottomPosが-128に等しく、(y<<2)がclipTopPosに等しい場合、minYは0に等しく設定され、maxYは5に等しく設定される。
・それ以外の場合で、clipTopPosが-128に等しく、clipBottomPosが-128に等しくなく、(y<<2)が(clipBottomPos-4)に等しい場合、minYは-2に等しく、maxYは3に等しく設定される。
・それ以外の場合で、clipTopPosが-128に等しくなく、clipBottomPosが-128に等しくない場合、minYは0に等しく設定され、maxYは3に等しく設定される。
・それ以外の場合は、minYは-2に等しく設定され、maxYは5に等しく設定される。
・変数minX、maxXおよびacは、次のように導出される:
・clipLeftPosが-128に等しくなく、(x<<2)がclipLeftPosに等しい場合、minXは0に等しく設定され、maxXは5に等しく設定される。
・それ以外の場合、clipRightPosが-128に等しくなく、(x<<2)が(clipRightPos-4)に等しい場合、minXは-2に等しく設定され、maxXは3に等しく設定される。
・それ以外の場合、minXは-2に等しく設定され、maxXは5に等しく設定される。
・変数ac[x][y]は、minX、maxX、minY、maxYに従ってテーブル8-22において指定される。
・変数sumH[x][y]、sumV[x][y]、sumD0[x][y]、sumD1[x][y]、sumOfHV[x][y]は次のように導出される:
変数sumH[x4][y4]、sumV[x4][y4]、sumD0[x4][y4]、sumD1[x4][y4]、sumOfHV[x4][y4]は次のように導出される:
sumH[x4][y4]=Σ i Σ j filtH[blkX+i][blkY+j] (8-1253)
ここで、i=-2..5, j=minY..maxY
sumV[x4][y4]=Σ i Σ j filtV[blkX+i][blkY+j] (8-1254)
ここで、i=-2..5, j=minY..maxY
sumD0[x4][y4]=Σ i Σ j filtD0[blkX+i][blkY+j] (8-1255)
ここで、i=-2..5, j=minY..maxY
sumD1[x4][y4]=Σ i Σ j filtD1[blkX+i][blkY+j] (8-1256)
ここで、i=-2..5, j=minY..maxY
sumOfHV[x4][y4]=sumH[x4][y4]+sumV[x4][y4] (8-1257)
3. x,y=0..CtbSizeY-1として、変数dir1[x][y]、変数dir2[x][y]および変数dirS[x][y]は次のように導出される。
・変数hv1、hv0、dirHVは次のように導出される:
・sumV[x>>2][y>>2]がsumH[x>>2][y>>2]より大きい場合、次が適用される:
hv1=sumV[x>>2][y>>2] (8-1258)
hv0=sumH[x>>2][y>>2] (8-1259)
dirHV=1 (8-1260)
・それ以外の場合は、次が適用される:
hv1=sumH[x>>2][y>>2] (8-1261)
hv0=sumV[x>>2][y>>2] (8-1262)
dirHV=3 (8-1263)
・変数d1、d0、dirDは次のように導出される:
・sumD0[x>>2][y>>2]がsumD1[x>>2][y>>2]より大きい場合、以下が適用される:
d1=sumD0[x>>2][y>>2] (8-1264)
d0=sumD1[x>>2][y>>2] (8-1265)
dirD=0 (8-1266)
・それ以外の場合、次が適用される:
d1=sumD1[x>>2][y>>2] (8-1267)
d0=sumD0[x>>2][y>>2] (8-1268)
dirD=2 (8-1269)
・変数hvd1、hvd0は次のように導出される:
hvd1=(d1*hv0>hv1*d0)?d1:hv1 (8-1270)
hvd0=(d1*hv0>hv1*d0)?d0:hv0 (8-1271)
・変数dirS[x][y]、dir1[x][y]およびdir2[x][y]は、次のように導出される:
dir1[x][y]=(d1*hv0>hv1*d0)?dirD:dirHV (8-1272)
dir2[x][y]=(d1*hv0>hv1*d0)?dirHV:dirD (8-1273)
dirS[x][y]=(hvd1>2*hvd0)?1:((hvd1*2>9*hvd0)?2:0) (8-1274)
varTab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4} (8-1275)
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*ac[x>>2][y>>2])>>(3+BitDepthY))] (8-1276)
transposeTable[]={0,1,0,2,2,3,1,3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0と等しくない場合、filtIdx[x][y]は次のように修正される:
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5 (8-1277)
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプルアレイalfPicture、
・現在のピクチャーの左上のサンプルに対する現在のクロマ符号化ツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
・代替クロマ・フィルタ・インデックスaltIdx。
このプロセスの出力は、修正されたフィルタリングされた再構成されたクロマ・ピクチャー・サンプルアレイalfPictureである。
現在のクロマ符号化ツリー・ブロックctbWidthCとctbHeightCの幅と高さは、次のように導出される:
ctbWidthC=CtbSizeY/SubWidthC (8-1278)
ctbHeightC=CtbSizeY/SubHeightC (8-1279)
フィルタ処理された再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマ符号化ツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1,y=0..ctbHeightC-1として、フィルタ処理される:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、xCtbC+x-PpsVirtualBoundariesPosX[n]/SubWidthCが0以上2未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n]/SubWidthC,
pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1280)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosX[n]/SubWidthC-xCtbC-xが0より大きく3未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]/SubWidthC-1,xCtbC+x+i) (8-1281)
・それ以外の場合は、次が適用される:]]
hx+i=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1282)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、yCtbC+y-PpsVirtualBoundariesPosY[n]/SubHeightCが0以上2未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n]/SubHeightC,
pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1283)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]/SubHeightC-yCtbC-yが0より大きく3より小さい場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]/SubHeightC-1,yCtbC+y+j) (8-1284)
・それ以外の場合は、次が適用される:]]
vy+j=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1285)
・変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、clipBotRightFlagは、(xCtbC*SubWidthC,yCtbC*SubHeightC)と(x*SubWidthC,y*SubHeightC)を入力として、8.8.5.5節に規定されたALF境界位置導出プロセスを呼び出すことによって導出される。
・変数h x+i およびv y+j は、(xCtb,yCtb)、(h x+i ,v y+j )、1,clipLeftPos,clipRightPos,clipTopPos,clipBottomPos,clipTopLeftFlag、clipBotRightFlagを入力として、0項に指定されているALFサンプル・パディング・プロセスを呼び出すことによって修正される。
・[[変数clipLeftPosはclipLeftPos/SubWidthCに等しく設定される。
・変数clipRightPosは、clipRightPos/SubWidthCに等しく設定される。
・変数clipTopPosはclipTopPos/SubHeightCに等しく設定される。
・変数clipBottomPosはclipBottomPos/SubHeightCに等しく設定される。
・垂直サンプル位置オフセットy1およびy2は、垂直クロマ・サンプル位置y、clipTopPosおよびclipBottomPosに従ってテーブル8-20において指定される。
・水平サンプル位置オフセットx1およびx2は、水平クロマ・サンプル位置x、clipLeftPosおよびclipRightPosに従ってテーブル8-24において指定される。]]
・変数applyVirtualBoundaryは、次のように導出される:
・現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界であり、pic_height_in_luma_samples-(yCtbC*SubHeightC)<CtbSizeY-4の場合、applyVirtualBoundaryは0に設定される:
・それ以外の場合、applyVirtualBoundaryは1に設定される。
・再構成されたサンプル・オフセットy1およびy2は、垂直ルーマ・サンプル位置yおよびapplyVirtualBoundaryに従って指定される。
・変数currは次のように導出される:
curr=recPicture[hx,vy] (8-1286)
・クロマ・フィルタ係数の配列f[j]とクロマ・クリッピング値の配列c[j]は、j=0..5として、次のように導出される:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][altIdx][j] (8-1287)
c[j]=AlfClipC[slice_alf_aps_id_chroma][altIdx][j] (8-1288)
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum) (8-1291)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・現在のルーマ符号化ツリー・ブロックの左上のサンプルに対する現在のサンプルを指定するルーマ位置(x,y)。
このプロセスの出力は以下の通り:
・左垂直境界位置clipLeftPos、
・右垂直境界位置clipRightPos、
・上水平境界位置clipTopPos、
・下水平境界位置clipBottomPos
・左上境界フラグclipTopLeftFlag、
・右下境界フラグclipBotRightFlag
変数clipTopLeftFlagとclipBotRightFlagは0に等しく設定される。
変数clipTopPosは次のように修正される:
・[[現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、]]y-(CtbSizeY-4)が0以上の場合、変数clipTopPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、[[PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、]]yCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
clipTopPos=PpsVirtualBoundariesPosY[n] (8-1292)
・それ以外の場合、yが3未満で、[[現在の符号化ツリー・ブロックの上部境界がピクチャーの上部境界ではなく、]]次の条件のうちの一つまたは複数が真である場合、変数clipTopPosはyCtbに等しく設定される:
・現在の符号化ツリー・ブロックの上部境界がブリックの上部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合、
・現在の符号化ツリー・ブロックの上部境界がスライスの上部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合、
・現在の符号化ツリー・ブロックの上部境界がサブピクチャーの上部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・[[現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、]]CtbSizeY-4-yが0より大きく4より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、[[PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、]]PpsVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1もしくは0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4より小さい場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1293)
・それ以外の場合で、CtbSizeY-yが4未満であり、[[現在の符号化ツリー・ブロックの下部境界がピクチャーの下部境界ではなく、]]次の条件のうちの一つまたは複数が真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しく設定される:
・現在の符号化ツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの下部境界がサブピクチャーの下部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipLeftPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、[[PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、]]xCtb+x-PpsVirtualBoundariesPosX[n]が0以上3未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1294)
・それ以外の場合で、xが3より小さく、[[現在の符号化ツリー・ブロックの左境界はピクチャーの左境界ではなく、]]次の条件のうちの一つまたは複数が真である場合、変数clipLeftPosはxCtbに等しく設定される:
・現在の符号化ツリー・ブロックの左境界がブリックの左境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの左境界がスライスの左境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの左境界がサブピクチャーの左境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、[[PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、]]PpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく4未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
clipRightPos=PpsVirtualBoundariesPosX[n] (8-1295)
・それ以外の場合、CtbSizeY-xが4未満であり、[[現在の符号化ツリー・ブロックの右境界がピクチャーの右境界ではなく、]]以下の条件のうちの一つまたは複数が真である場合、変数clipRightPosはxCtb+CtbSizeYに等しく設定される:
・現在の符号化ツリー・ブロックの右境界がブリックの右境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの右境界がスライスの右境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在の符号化ツリー・ブロックの右境界がサブピクチャーの右境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・次の条件のうち一つまたは複数が真の場合、変数clipXFlagはtrueに等しく設定される:
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+offSetXHor,yCtb+offsetXVer)をカバーする符号化ツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+offSetXHor,yCtb+offsetXVer)をカバーする符号化ツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーする符号化ツリー・ブロックと位置(xCtb+offSetXHor,yCtb+offsetXVer)をカバーする符号化ツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマ符号化ツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・現在のピクチャーの左上のサンプルに対する近傍サンプルを指定するルーマ位置(x,y)
・その色成分がクロマ成分であるか否かを指定するフラグ
・左垂直境界位置clipLeftPos、
・右垂直境界位置clipRightPos、
・上水平境界位置clipTopPos、
・下水平境界位置clipBottomPos、
・左上境界フラグclipTopLeftFlag、
・右下境界フラグclipBotRightFlag
このプロセスの出力は以下の通り:
・現在のピクチャーの左上のサンプルに対する近傍サンプルを指定する修正されたルーマ位置(x,y)、
・変数picWidth,picHeight,xCtbCur,yCtbCur,CtbSizeHor,CtbSizeVer,topBry,botBry,leftBry,rightBryは次のように導かれる:
picWidth=isChroma ? pic_width_in_luma_samples/SubWidthC:pic_width_in_luma_samples
pic_width_in_luma_samples/SubWidthC:pic_width_in_luma_samples (8-xxxx)
picHeight=isChroma ? pic_height_in_luma_samples/SubHeightC:pic_height_in_luma_samples (8-xxxx)
xCtbCur=isChroma ? xCtb/SubWidthC:xCtb (8-xxxx)
yCtbCur=isChroma ? yCtb/SubHeightC:yCtb (8-xxxx)
CtbSizeHor=isChroma ? CtbSizeY/SubWidthC:CtbSizeY (8-xxxx)
CtbSizeVer=isChroma ? CtbSizeY/SubHeightC:CtbSizeY (8-xxxx)
topBry=isChroma ? clipTopPos/SubHeightC:clipTopPos (8-xxxx)
botBry=isChroma ? clipBottomPos/SubHeightC:clipBottomPos (8-xxxx)
leftBry=isChroma ? clipLeftPos/SubWidthC:clipLeftPos (8-xxxx)
rightBry=isChroma ? clipRightPos/SubWidthC:clipRightPos (8-xxxx)
変数(x,y)は次のように修正される:
・topBryが0以上の場合、次が適用される:
x=y<topBry ? Clip3(xCtbCur,xCtbCur+CtbSizeHor-1,x):x (8-xxxx)
y=Clip3(topBry,picHeight-1,y) (8-xxxx)
・botBryが0以上の場合、次が適用される:
x=y>=botBry ? Clip3(xCtbCur,xCtbCur+CtbSizeHor-1,x):x (8-xxxx)
y=Clip3(0,botBry-1,y) (8-xxxx)
・leftBryが0以上の場合、次が適用される:
x=Clip3(leftBry,picWidth-1,x) (8-xxxx)
・RightBryが0以上の場合、次が適用される:
x=Clip3(0,rightBry-1,x) (8-xxxx)
次の条件がすべて真である場合、(x,y)は(xCtbCur,y)に等しく設定される:
・clipTopLeftFlagがtrueに等しい
・topBryが0より小さく、leftBryが0より小さい
・xがxCtbCurより小さく、yはyCtbCurより小さい
以下の条件がすべて真である場合、(x,y)は(xCtbCur+CtbSizeHor-1,yCtbCur)に等しく設定される:
・clipBotRightFlagがtrueに等しい
・botBryが0未満であり、rightBryが0未満
・xがxCtbCur+CtbSizeHor以上であり、yがyCtbCur+CtbSizeVer以上
本願は、2020年10月10日に出願された国際特許出願PCT/CN2020/120063に基づき、同出願は2019年10月10日に出願された国際特許出願第PCT/CN2019/110489号、2019年10月11日に出願された国際特許出願第PCT/CN2019/110681号、2019年10月14日に出願された国際特許出願第PCT/CN2019/111114号の優先権および利益を適時に主張するために行われる。前述の特許出願のすべては、ここに参照によりその全体において組み込まれる。
本願は、2020年10月10日に出願された国際特許出願PCT/CN2020/120063に基づき、同出願は2019年10月10日に出願された国際特許出願第PCT/CN2019/110489号、2019年10月11日に出願された国際特許出願第PCT/CN2019/110681号、2019年10月14日に出願された国際特許出願第PCT/CN2019/111114号の優先権および利益を適時に主張するために行われる。前述の特許出願のすべては、ここに参照によりその全体において組み
この特許文献は、概括的には、ビデオコーディングおよび復号技術に向けられる。
7.3.2.3 シーケンスパラメータセットRBSPシンタックス
log2_min_luma_coding_block_size_minus2に2を加えたものは、最小ルーマ・コーディング・ブロック・サイズを指定する。
変数CtbLog2SizeY、CtbSizeY、MinCbLog2SizeY、MinCbSizeY、MinTbLog2SizeY、MaxTbLog2SizeY、MinTbSizeY、MaxTbSizeY、PicWidthInCtbsY、PicHeightInCtbsY、PicSizeInCtbsY、PicWidthInMinCbsY、PicHeightInMinCbsY、PicSizeInMinCbsY、PicSizeInSamplesY、PicWidthInSamplesCおよびPicHeightInSamplesCは、次のように導出される:
テーブル1 境界強度(SPS IBCが無効の場合)
bSidePisLargeBlk=((エッジ・タイプが垂直であり、かつ、p0がCUに属し、幅>=32)||(エッジ・タイプが水平であり、かつ、p0がCUに属し、高さ>=32)) ? TRUE:FALSE
bSideQisLargeBlk=((エッジ・タイプが垂直であり、かつ、q0がCUに属し、幅>=32)||(エッジ・タイプが水平であり、かつ、q0がCUに属し、高さ>=32)) ? TRUE:FALSE
条件1=(bSidePisLargeBlk||bSidePisLargeBlk) ? TRUE:FALSE
ここで、d=dp0+dq0+dp3+dq3である。
双線形フィルタは、境界のいずれか一方の側のサンプルが大きなブロックに属する場合に使用される。大きなブロックに属するサンプルは、垂直エッジについては幅≧32である場合、水平エッジについては高さ≧32である場合として定義される。
クロマ強フィルタは、ブロック境界の両側で使用される。ここで、クロマ・フィルタは、クロマ・エッジの両側が8(クロマ位置)以上であり、3つの条件に関する以下の判定が満たされる場合に選択される:第1の条件は、境界強度と大きなブロックの決定のためのものである。提案されるフィルタは、ブロック・エッジを直交して横切るブロック幅または高さがクロマ・サンプル領域において8以上である場合に適用できる。第2および第3の条件は、基本的にHEVCルーマ・ブロッキング解除決定の場合と同じであり、それぞれオン/オフ決定および強フィルタ決定である。
次いで、dはHEVCルーマ・ブロッキング解除のように導出される。
dpqは、HEVCと同様に導出される。
sq3=Abs(q0-q3), HEVCと同様に導出される
HEVC設計と同様に、StrongFilterCondition=(dpqは(β>>2)より小さく、sp3+sq3は(β>>3)より小さく、Abs(p0-q0)は(5*tC+1)>>1より小さい。
次のクロマについての強いブロッキング解除フィルタが定義される:
位置依存クリッピングtcPDは、境界にある7個、5個および3個のサンプルを修正する強く、長いフィルタに関わるルーマ・フィルタリング・プロセスの出力サンプルに適用される。量子化誤差分布を仮定して、より高い量子化ノイズを有することが期待され、よって、再構成されたサンプル値の、真のサンプル値からの、より高い偏差を有することが期待されるサンプルについて、クリッピング値を増加させることが提案される。
Tc3={3,2,1};
閾値を定義した後、フィルタリングされたp'iおよびq'iのサンプル値は、tcPおよびtcQクリッピング値に従ってクリッピングされる:
p"i=Clip3(p'i+tcPi,p'i-tcPi,p'i);
q"j=Clip3(q'j+tcQj,q'j-tcQj,q'j);
ここで、p'iとq'iはフィルタリングされたサンプル値、p"iとq"jはクリッピング後の出力サンプル値、tcPi はVVC tcパラメータとtcPDとtcQDから導出されたクリッピング閾値である。関数Clip3は、VVCで指定されるクリッピング関数である。
長いフィルタとサブブロック・ブロッキング解除の両方を用いた並列フレンドリーなブロッキング解除を可能にするために、長いフィルタは、長いフィルタのルーマ・コントロールに示されるように、サブブロック・ブロッキング解除(アフィン、ATMVP、DMVR)を使用する側で、高々5つのサンプルで修正するように制限される。さらに、サブブロック・ブロッキング解除は、CUまたは暗黙的なTU境界に近い8×8グリッド上のサブブロック境界が、それぞれの側の高々2つのサンプルを修正するように制限されるように調整される。
SAOの入力は、DB後の再構成されたサンプルである。SAOの概念は、まず、選択された分類器を用いて領域サンプルを複数のカテゴリーに分類し、各カテゴリーについてオフセットを得て、次いで、該オフセットをカテゴリーの各サンプルに加えることによって、領域の平均サンプル歪みを低減することであり、ここで、分類器インデックスおよび領域のオフセットは、ビットストリームにおいてコーディングされる。HEVCおよびVVCでは、領域(SAOパラメータ信号伝達のための単位)はCTUであると定義されている。
テーブル3:エッジ・オフセットについてのサンプル分類規則
DBの入力は、DBおよびSAO後の再構成されたサンプルである。サンプル分類およびフィルタリング・プロセスは、DBおよびSAO後の再構成されたサンプルに基づく。
いくつかの実施形態では、(図9に示すような)3つまでのダイヤモンド・フィルタ形状が、ルーマ成分について選択できる。ルーマ成分について使用されるフィルタの形状を示すために、インデックスがピクチャー・レベルで信号伝達される。それぞれの四角はサンプルを表し、Ci(iは0~6(左)、0~12(中央)、0~20(右))は、そのサンプルに適用される係数を表す。ピクチャーにおけるクロマ成分については、常に5×5のダイヤモンド形状が使用される。
各ブロックは、25個のクラスのうちの1つにカテゴリー分けされる。分類インデックスCは、その方向性Dと活性
図10は、5×5ダイヤモンド・フィルタ・サポートについての相対的なコーディネーターを示す:左は対角方向、中央は垂直反転、右は回転である。
いくつかの実施形態では、GALFフィルタ・パラメータは、第1のCTUについて、たとえば、スライス・ヘッダの後、第1のCTUのSAOパラメータの前に信号伝達される。ルーマ・フィルタ係数の25個までの集合が信号伝達されることができる。ビット・オーバーヘッドを減らすために、異なる分類のフィルタ係数がマージされることができる。また、参照ピクチャーのGALF係数が記憶され、現在ピクチャーのGALF係数として再利用されることが許容される。現在ピクチャーは、参照ピクチャーについて記憶されているGALF係数を使用し、GALF係数信号伝達をバイパスすることを選択することができる。この場合、参照ピクチャーの1つに対するインデックスのみが信号伝達され、示された参照ピクチャーの記憶されたGALF係数が現在ピクチャーのために継承される。
デコーダ側では、あるブロックについてGALFが有効にされていると、そのブロック内の各サンプルがフィルタリングされ、以下に示されるようなサンプル値R'(i,j)が得られる。ここで、Lはフィルタ長を表し、fm,nはフィルタ係数を表し、f(k,l)はデコードされたフィルタ係数を表す。
2.7.1 例示的なGALF
いくつかの実施形態では、適応ループ・フィルタのフィルタリング・プロセスは、以下のように実行される:
(1)適応フィルタ形状が除去される。ルーマ成分については7×7のフィルタ形状、クロマ成分については5×5のフィルタ形状のみが許容される。
(2)スライス/ピクチャー・レベルからCTUレベルにALFパラメータの信号伝達が除去される。
(3)クラス・インデックスの計算は、2×2ではなく、4×4レベルで実行される。さらに、いくつかの実施形態では、ALF分類のためのサブサンプリングされたラプラシアン計算が利用される。より具体的には、1つのブロック内の各サンプルについて、水平/垂直/45対角/135度の勾配を計算する必要はない。代わりに、1:2サブサンプリングが使用される。
2.8.1 フィルタリング再定式化
式(11)は、コーディング効率の影響なしに、次の式で再定式化できる:
ハードウェアおよび組み込みソフトウェアでは、ピクチャー・ベースの処理は、その高いピクチャー・バッファ要件のため、事実上受け入れられない。オンチップ・ピクチャー・バッファの使用は非常に高価であり、オフチップ・ピクチャー・バッファの使用は、外部メモリ・アクセス、電力消費、およびデータ・アクセス・レイテンシーを著しく増加させる。よって、DF、SAO、ALFは、実際の製品ではピクチャー・ベースからLCUベースのデコードへと変更される。LCUベースの処理がDF、SAO、ALFに使用される場合、デコード・プロセス全体は、複数のLCUの並列処理のために、LCUパイプライン式のラスタスキャンでLCUごとにできる。この場合、1つのLCU行を処理するには、上のLCU行からのピクセルが必要となるため、DF、SAO、およびALFのためにラインバッファが必要となる。オフチップ・ラインバッファ(たとえば、DRAM)が使用される場合、外部メモリ帯域幅および電力消費が増加し、オンチップ・ラインバッファ(たとえば、SRAM)が使用される場合、チップ面積が増加する。よって、ラインバッファはすでにピクチャー・バッファよりもはるかに小さいが、ラインバッファを減らすことが望ましい。
・ラインK~N(水平DFピクセル):4ライン
・ラインD~J(SAOフィルタリングされたピクセル):7ライン
・ラインJとラインKの間のSAOエッジ・オフセット分類子値:0.25ライン
したがって、必要なルーマ・ラインの総数は、7+4+0.25=11.25となる。
図15A~15Bは、仮想境界がCTU境界より4ライン上にある場合(N=4)についての修正されたブロック分類を示す。図15Aに示されているように、行Gで始まる4×4ブロックについては、ブロック分類は、ラインEからJまでのみを使用するが、ラインJに属するサンプルについてのラプラシアン勾配計算は、もう1つ下のライン(ラインK)をさらに必要とする。したがって、ラインKはラインJでパディングされる。
図16A~16Cに示されるように、仮想境界に近いラインに属するルーマ・サンプルをフィルタリングするために、フィルタの打ち切りされたバージョンが使用される。図16Aを例に取ると、図13に示されるようにラインMをフィルタリングするとき、たとえば、7×7ダイヤモンド・サポートの中心サンプルはラインMにあり、VB(太線で示される)の上の1つのラインにアクセスする必要がある。この場合、VBより上のサンプルはVBより下の、すぐ下のサンプルからコピーされる。たとえば、実線のP0サンプルが上の破線位置にコピーされる。対称的に、実線のP3サンプルも、すぐ下の破線の位置にコピーされる。たとえその位置のためのサンプルが利用可能であってもである。コピーされたサンプルは、ルーマ・フィルタリング・プロセスにおいてのみ使用される。
非線形ALFがあるCTBについて無効にされている場合、たとえば式(14)のクリッピング・パラメータが(1<<Bitdepth)に等しい場合、パディング・プロセスは、フィルタ係数を修正することによって置き換えることができる(修正係数に基づくALF[modified-coeff based ALF]、MALFとしても知られる)。たとえば、ラインL/I内のサンプルをフィルタリングするとき、フィルタ係数c5はc5'に修正され、この場合、実線のP0Aから破線のP0Aに、および実線のP3Bから破線のP3Bにルーマ・サンプルをコピーする必要はない。図18A。この場合、フィルタリングされるべき現在のサンプルが(x,y)に位置すると仮定すると、両側パディングおよびMALFは同じ結果を生成する。
新たに追加された部分は、太字のイタリック体の下線付きテキストで示される。削除された部分は[[]]を使って示される。
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタ処理され再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・filtIdx[x][y]によって指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]およびルーマ・クリッピング値の配列c[j]は、j=0..11として、次のように導出される:
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうち一つまたは複数が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。〕
・再構成されたサンプル・オフセットr1、r2、およびr3は、水平方向ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
・変数currは次のように導出される:
curr=recPictureL[hx,vy] (8-1188)
・変数sumは次のように導出される:
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマコーディングツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1230)
ctbHeightC=CtbSizeY/SubHeightC (8-1231)
フィルタ処理された再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマコーディングツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1、y=0..ctbHeightC-1として、次のようにフィルタリングされる:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・以下の条件のうち一つまたは複数が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。〕
・再構成されたサンプル・オフセットr1、r2は、水平方向ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
・変数currは次のように導出される:
curr=recPictureL[hx,vy] (8-1238)
・クロマ・フィルタ係数の配列f[j]とクロマクリッピング値の配列c[j]は、j=0..5として次のように導出される:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][j]
c[j]=AlfClipC[slice_alf_aps_id_chroma][j]
・変数sumは次のように導出される:
現在のVVC設計によれば、あるCTBの下部境界がスライス/ブリックの下部境界である場合、ALF仮想境界処理方法は無効にされる。たとえば、図19に示されるように、1つのピクチャーが複数のCTUおよび2つのスライスに分割される。
・CTBの下部境界がピクチャーの下部境界である場合(たとえばCTU-D)、上のCTU行からの4ラインと現在のCTUにおける全ラインを含む(M+4)×Mブロックを処理する。
・そうではなく、CTBの下部境界がスライス(またはブリック)の下部境界であり(たとえばCTU-C)、loop_filter_across_slice_enabled_flag(またはloop_filter_across_bricks_enabled_flag)が0に等しい場合、上のCTU行からの4ラインと現在のCTUにおける全ラインを含む(M+4)×Mブロックを処理する。
・そうではなく、スライス/ブリック/タイルにおける最初のCTU行のCTU/CTBの場合(たとえば、CTU-A)、最後の4ラインを除くM×(M-4)ブロックを処理する。
・そうではなく、スライス/ブリック/タイルの最初のCTU行内ではなく(たとえばCTU-B)、スライス/ブリック/タイルの最後のCTU行内ではないCTU/CTBの場合、上のCTU行からの4ラインを含み、現在のCTU内の最後の4ラインを除くM×Mブロックを処理する。
VTM5における水平ラップアラウンド動き補償は、正距円筒図法(ERP)投影フォーマットでの再構成された360度ビデオの視覚的品質を改善するために設計された360固有のコーディングツールである。従来の動き補償では、動きベクトルが参照ピクチャーのピクチャー境界を越えるサンプルを参照する場合、対応するピクチャー境界の最も近い近傍からコピーすることによって境界外サンプルの値を導出するために、反復的なパディングが適用される。360度ビデオでは、この反復的パディング方法は適当ではなく、再構成されたビューポート・ビデオにおいて「シーム・アーチファクト」と呼ばれる視覚的アーチファクトを引き起こす可能性がある。360度ビデオは球面上で捕捉され、本来的に「境界」をもたないため、投影ドメインにおいて参照ピクチャーの境界外にある参照サンプルは、球面ドメインにおいては近傍サンプルから常に得ることができる。一般的な投影フォーマットについては、2D-3D座標変換および3D-2D座標変換、ならびに端数サンプル位置についてのサンプル補間に関わるので、球面ドメインでは対応する近傍サンプルを導出することが難しいことがある。この問題は、ERP投影フォーマットの左と右の境界については、ずっと単純である。なぜなら、左のピクチャー境界の外側の球面近傍は右のピクチャー境界の内側のサンプルから得られ、その逆も同様であるからである。
いくつかの実施形態では、以下の特徴が含まれる。
○(高度な)時間的ルーマ動きベクトル予測のための導出プロセス
○ルーマ・サンプル双線形補間プロセス
○ルーマ・サンプル8タップ補間フィルタリング・プロセス
○クロマ・サンプル補間プロセス。
現在のVVC設計には以下のような問題がある。
a. スライス/ブリック/タイル境界を前もって知らないデコーダ(w.e.低遅延アプリケーション)については、ALFラインバッファが復元される必要がある。ラインバッファ内のコンテンツがALFフィルタリングに使用されるか否かは、現在のCTUがスライス/ブリック/タイル境界CTUでもあるかどうかに依存するが、この情報は、次のスライス/ブリック/タイルがデコードされるまでは不明である。
b. スライス/ブリック/タイル境界を前もって知っているデコーダについては、ALFラインバッファの使用を避けるために、デコーダは、パイプライン・バブルを我慢するか(可能性が非常に低い)、常時64×64 VDPUあたり68ラインの速度でALFを実行する(過剰な備え)必要がある。
a. 一例では、ブロックの下部境界が360度仮想境界であり、ALF仮想境界がこのブロックにも適用される場合、この場合、360度仮想境界のためのパディング方法は、まず、360度仮想境界の下の仮想サンプルを生成するために適用されうる。その後、360度仮想境界の下に位置するこれらの仮想サンプルは、利用可能なものとして扱われる。また、図16A~Cに従って、ALF 両側パディング方法がさらに適用されてもよい。一例が図25に示される。
7.3.2.3 シーケンスパラメータセットRBSP構文
以下のリストは、一般的な概念を説明するための例として考慮されるべきである。リストされた技法は、狭義に解釈されるべきではない。さらに、これらの技法は、任意の仕方で組み合わせることができる。
a. あるいはまた、さらに、この場合、ALF仮想境界処理方法は無効にされてもよい。
a. 一例では、applyVirtualBoundaryは、所与のCTU/CTBサイズについて、たとえばK×Lに等しいCTU/CTBサイズ(たとえば、K=L=4)について常に偽に設定される。
b.一例では、applyVirtualBoundaryは、K×L以下の、またはK×Lより小さいあるCTU/CTBサイズ(たとえば、K=L=8)について常に偽に設定される。
c. あるいはまた、ALFは、4×4、8×8などのある種のCTU/CTBサイズについて無効にされる。
a. 一例では、CTBの下部境界が当該ビデオ単位の境界または仮想境界である場合、コーディングツリー・ブロック(CTB)についてALF仮想境界処理方法が有効にされてもよい(たとえば、applyVirtualBoundaryが真に設定される)。
i. あるいはまた、さらに、下部境界が下部ピクチャー境界でない場合、または下部境界がピクチャー外である場合は、上記の方法が有効にされる。
b. 現在のコーディングツリー・ブロックの下部境界がピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しい場合、ALF仮想境界処理メソッドはやはり有効にされてもよい(たとえば、applyVirtualBoundaryが真に設定される)。
c. 一例では、CTBについてのALF仮想境界処理方法(たとえばapplyVirtualBoundaryの値)を有効にするかどうかは、CTBの下部境界とピクチャーの下部境界の間の関係のみに依存してもよい。
i. 一例では、applyVirtualBoundaryが偽に設定されるのは、CTBの下部境界がCTBを含むピクチャーの下部境界である場合、または下部境界がピクチャーの外側である場合のみである。
ii. 一例では、applyVirtualBoundaryは、CTBの下部境界がCTBを含むピクチャーの下部境界ではない場合に真に設定される。
d. 一例では、図18A~18CにおけるCTU-Cをデコードする場合、M×Mサンプルは、上のCTUからのK個のラインを用い、仮想境界より下のK個のラインを除外してフィルタリングされてもよい。
a. あるいはまた、信号伝達されたloop_filter_across_bricks_enabled_flag/loop_filter_across_slices_enabled_flagは、ALFを除いてブロッキング解除フィルタおよびSAOのフィルタリング・プロセスのみを制御してもよい。
b. 一例では、別のサンプルについてALFを行うために、対応する位置にある再構成されたサンプルの代わりに、仮想サンプルが使用されてもよい。
a. あるいはまた、さらに、ループ内フィルタリングのために境界にあるサンプルを処理するために、仮想境界の方法(たとえば、両側パディング方法)がブロックに適用されてもよい。
b. あるいはまた、さらに、上記の諸方法は、ブロックがビデオ単位の下部境界に位置するサンプルを含む場合に適用されてもよい。
c. 一例では、1つのブロックのK個のラインをデコードする際に、K個のラインがブロックの仮想境界の下であり(たとえば、図17A~17BのCTU-Bにおける最後のK個のライン)、ブロックの下部境界がビデオ単位の下部境界である場合、これらのK個のラインの外の他のサンプルの使用を回避するために、ALF分類/フィルタリング・プロセスにおいて仮想サンプルが生成されてもよく、たとえば、両側パディング方法が適用されてもよい。
i. あるいはまた、それら最後のK行についてALFが無効にされてもよい。
d. 一例では、1つのブロックが複数の境界にある場合、ALF分類のために使用されるピクセル/サンプルは、これらの複数の境界のいずれにもまたがらないように制限されうる。
i. 一例では、あるサンプルについて、そのある近傍サンプルが「利用可能でない」(たとえば、複数の境界のいずれかを横切る)場合、単独で、またはすべての種類の勾配/方向性が、そのサンプルについて計算されないことがある。
1. 一例では、サンプルの勾配は、ゼロとして扱われてもよい。
2. 一例では、サンプルの勾配は、「利用可能でない」として扱われてもよく、ALF分類プロセスで導かれる活性(activity)(たとえば、セクション2.6.1.1の式(8)で定義される)に加えられなくてもよい。
ii. 一例では、ALF分類プロセスで使用される部分的サンプルのみが「利用可能」である場合(たとえば、これらの境界のどれも越えていない場合)、ALF分類プロセスで導かれる活性/方向性は、ある因子によってスケーリングされてもよい。
iii. 一例では、境界ブロックについて、ALF分類プロセスにおいてN個のサンプルについて勾配/方向性が計算される必要があり、M個のサンプルについてのみ勾配を計算することができると仮定する(たとえば、サンプルのある近傍サンプルが「利用可能」でない場合、勾配はそれについて計算できない)。その場合、活性にN/Mを乗算されてもよい。
1. あるいはまたは、N/Mに依存する因子を乗算されてもよい。たとえば、数はMN(Nは整数)であってもよく、たとえば、M=2であってもよい。
e. 一例では、M×N(たとえば、現在の設計ではM=N=8、M列およびN行)窓内の部分サンプルの勾配が、分類のために使用されうる。
i. たとえば、現在のN1*N2(現在の設計ではN1=N2=4)ブロックについては、M*NはN1*N2ブロックを中心としている。
ii. 一例では、いずれかの境界を越えてサンプルにアクセスする必要のないサンプルの勾配が使用されてもよい。
1. あるいはまた、さらに、一つまたは複数の境界に位置するサンプルの勾配を計算する場合、現在のサンプルのいくつかの近傍サンプルが「利用可能でない」ならば、パディング(たとえば、片側パディング(1-side padding))が実行されてもよい。
2. あるいはまた、現在のサンプルがビデオ単位の上部境界(スライス/ブリック/タイル/360度ビデオ仮想境界またはALF仮想境界など)に位置する場合、上のK個の利用可能でないライン(たとえば、K=1,2)がパディングされてもよい。
3. あるいはまた、さらに、現在のサンプルがビデオ単位の左境界に位置する場合、左のK個(たとえば、K=1,2)の利用可能でないカラムがパディングされてもよい。
4. あるいはまた、さらに、現在のサンプルがビデオ単位の右境界に位置する場合、右のK個(たとえば、K=1,2)の利用可能でないカラムがパディングされてもよい。
5. あるいはまた、さらに、現在のサンプルがビデオ単位の底部境界に位置する場合、底部のK個(たとえば、K=1,2)の利用可能でないラインがパディングされてもよい。
6. あるいはまた、さらに、現在のサンプルがビデオ単位の上の境界および左の境界に位置するならば、上のK1個(たとえば、K1=1、2)の利用可能でないラインがまずパディングされてM*(N+K1)窓を生成してもよく、次いで、左のK2個(たとえば、K2=1、2)の利用可能でないカラムがパディングされて(M+K2)*(N+K1)窓を生成してもよい。
a. あるいはまた、左のK2個(たとえば、K2=1,2)の利用可能でないカラムがまずパディングされて、(M+K2)*N窓を生成してもよく、次いで、上のK1個(たとえば、K1=1,2)の利用可能でない行がパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
7. あるいはまた、さらに、現在のサンプルがビデオ単位の上の境界および右の境界に位置するならば、上のK1個(たとえば、K1=1、2)の利用可能でないラインがまずパディングされて、M*(N+K1)窓を生成してもよく、その後、右のK2個(たとえば、K2=1、2)の利用可能でないカラムがパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
a. あるいはまた、右のK2個(たとえば、K2=1,2)の利用可能でない列がまずパディングされて、(M+K2)*N窓を生成してもよく、次いで、上のK1個(たとえば、K1=1,2)の利用可能でない行がパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
8. あるいはまた、さらに、現在のサンプルがビデオ単位の底部境界および右の境界に位置するならば、下部のK1個(たとえば、K1=1、2)の利用可能でないラインがまずパディングされて、M*(N+K1)窓を生成してもよく、次いで、右のK2個(たとえば、K2=1、2)の利用可能でないカラムがパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
a. あるいはまた、右のK2個(たとえば、K2=1,2)の利用可能でない列がまずパディングされて、(M+K2)*N窓を生成してもよく、次いで、下部のK1個(たとえば、K1=1,2)の利用可能でない行がパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
9. あるいはまた、現在のサンプルがビデオ単位の底部境界および左の境界に位置するならば、下部のK1個(たとえば、K1=1、2)の利用可能でないラインがまずパディングされてM*(N+K1)窓を生成してもよく、次いで、左のK2個(たとえば、K2=1、2)の利用可能でないカラムがパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
a. あるいはまた、左のK2個(たとえば、K2=1,2)の利用可能でない列がまずパディングされて、(M+K2)*N窓を生成してもよく、次きで、下部のK1個(たとえば、K1=1,2)の利用可能でない行がパディングされて、(M+K2)*(N+K1)窓を生成してもよい。
10. あるいはまた、さらに、パディングされたサンプルが、勾配を計算するために使用されてもよい。
iii. 一例では、ビデオ単位の上/下の境界(たとえば、スライス/ブリック/タイル/360度ビデオ仮想境界またはALF仮想境界)におけるブロックについて、M*(N-C1)窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の上/下のC1個のラインの勾配は、分類において使用されない。
iv. 一例では、ビデオ単位の左/右境界におけるブロックについて、(M-C1)*N窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の左/右のC1列の勾配は、分類において使用されない。
v. 一例では、ビデオ単位の上部境界および下部境界におけるブロックについて、M*(N-C1-C2)窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の上部のC1行および下部のC2行の勾配は、分類において使用されない。
vi. 一例では、ビデオ単位の上部境界および左の境界におけるブロックについて、(M-C1)*(N-C2)窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の上部のC1行および左のC2列の勾配は、分類において使用されない。
vii. 一例では、ビデオ単位の上部境界および右の境界におけるブロックについて、(M-C1)*(N-C2)窓におけるサンプルの勾配が、そのブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の上部のC1行および右のC2列の勾配は、分類において使用されない。
viii. 一例では、ビデオ単位の底部境界および左境界におけるブロックについて、(M-C1)*(N-C2)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の下部のC1行および左のC2列の勾配は、分類において使用されない。
ix. 一例では、ビデオ単位の底部境界および右の境界におけるブロックについて、(M-C1)*(N-C2)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の下部のC1行および右のC2列の勾配は、分類において使用されない。
x. 一例では、ビデオ単位の左境界および右境界におけるブロックについて、(M-C1-C2)*N窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の左のC1列および右のC2列の勾配は、分類において使用されない。
xi. 一例では、ビデオ単位の上部境界、下部境界および左境界におけるブロックについて、(M-C3)*(N-C1-C2)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の上部C1行、下部C2行、左C3列の勾配は、分類において使用されない。
xii. 一例では、ビデオ単位の上部境界、下部境界および右境界におけるブロックについて、(M-C3)*(N-C1-C2)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の上部のC1行、下部のC2行および右C3列の勾配は、分類において使用されない。
xiii. 一例では、ビデオ単位の左境界、右境界、および上部境界におけるブロックについて、(M-C1-C2)*(N-C3)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、さらに、M*N窓の左のC1列、右のC2列、および上部C3行の勾配は、分類において使用されない。
xiv. 一例では、ビデオ単位の左境界、右境界および下部境界におけるブロックについて、(M-C1-C2)*(N-C3)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の左のC1列、右のC2列および下部のC3行の勾配は、分類において使用されない。
xv. 一例では、ビデオ単位の左境界、右境界、上部境界、および下部境界におけるブロックについて、(M-C1-C2)*(N-C3-C4)窓におけるサンプルの勾配が、ブロックの分類のために使用されてもよい。
1. あるいはまた、M*N窓の左のC1列および右のC2列、上部のC3行および下部のC4行の勾配は、分類において使用されない。
xvi. 一例では、C1、C2、C3およびC4は、2に等しい。
xvii. 一例では、勾配計算において必要とされる「利用可能でない」近傍サンプルがないサンプルの勾配が使用されうる。
f. 一例では、1つのラインが複数の境界にある場合(たとえば、ラインから境界までの間の距離が閾値未満)、パディング・プロセスは、それが何個の境界に属しうるかに関係なく、1回だけ実行される。
i. あるいはまた、何個の近傍ラインがパディングされるかは、すべての境界に対する現在のラインの位置に依存する。
ii. たとえば、何個の近傍ラインがパディングされるかは、たとえば現在のラインが2つの境界内にあり、該2つの境界が上および下にある場合、現在のラインと2つの境界との間の距離によって決定されてもよい。
iii. たとえば、何個の近傍ラインがパディングされるかは、たとえば現在のラインが2つの境界内にあり、それら2つの境界が上および下にある場合、現在の行と最も近い境界との間の距離によって決定されてもよい。
iv. たとえば、何個の近傍ラインがパディングされるかは、各境界について独立して計算されてもよく、最大のものが最終的なパディングされるライン数として選択される。
v. 一例では、何個の近傍ラインがパディングされるかは、ラインの各側(たとえば、上側および下側)について決定されてもよい。
vi. 一例では、両側パディング方法について、何個の近傍ラインがパディングされるかは、両側について合同で決定されてもよい。
vii. あるいはまた、さらに、ALFによって使用される両側パディング方法が適用される。
g. 一例では、1つのラインが複数の境界にあり、ラインの各側(たとえば、上側と下側)に少なくとも1つの境界がある場合、ALFはそれについて無効にされてもよい。
h. 一例では、現在のラインによって必要とされるパディングされたラインの数が閾値よりも大きい場合、ALFは現在のラインについて無効にされてもよい。
i. 一例では、任意の側のパディングされたラインの数が閾値よりも大きい場合、ALFは現在のラインについて無効にされてもよい。
ii. 一例では、両側におけるパディングされたラインの合計数が閾値よりも大きい場合、ALFは現在のラインについて無効にされてもよい。
i. あるいはまた、上記の諸方法は、ブロックがビデオ単位の下部境界に位置するサンプルを含み、ALFのようなループ内フィルタリングがブロックについて有効にされている場合に適用されてもよい。
j. あるいはまた、さらに、上記の諸方法は、たとえば、ブロックがビデオ単位の下部境界に位置するサンプルを含み、境界をまたぐフィルタリングが許可されない(たとえば、pps_loop_filter_across_virtual_boundaries_disabled_flag/loop_filter_across_slices_enabled_flag/loop_filter_across_slices_enabled_flagが真である)場合のようなある種の条件下で適用されてもよい。
k. 提案される方法は、垂直境界に位置するサンプル/ブロックにも適用可能である。
a. 一例では、片側パディングのためのライン数は、(M-min(D0,D1))に設定される。
b. 一例では、片側パディングのためのライン数は、(M-max(D0,D1))に設定される。
c. 上記の例については、D0、D1は、現在のラインと上/下の境界との間の距離を示す。
d. 上記の例については、Mは、ALF仮想境界が1つのCTUの底部から何ライン目かを示す。
a. 一例では、異なる仕方の選択は、フィルタリングされるサンプルの位置に依存してもよい。
b. 一例では、ビデオ単位(たとえばCTB)の下部境界におけるサンプルは、それが別のサンプルのためにALFにおいて使用される場合、第1の方法で選択されてもよい。そうでない場合(境界にない場合)、第2の方法が選択される。
a. 一例では、ALF分類プロセスによって必要とされるサンプルがVPDU境界の外側または仮想境界より下にある場合、それは仮想サンプルによって置き換えられてもよく、または、そのサンプルについての分類結果が、利用可能なサンプルからパディングされたものなど、他のサンプルに関連付けられた結果からコピーされてもよい。
b. 一例では、フィルタリング・プロセスによって必要とされるサンプルがVPDU境界の外側または仮想境界より下にある場合、それは、利用可能なサンプルからパディングされたものなど、仮想サンプルによって置き換えられてもよい。
c. 一例では、あるブロックについて、それがVPDUの境界に位置するサンプルを含む場合、そのブロックについてALF仮想境界処理方法が有効にされてもよい(たとえば、applyVirtualBoundaryが真に設定される)。
d. あるいはまた、水平VPDU境界を越えるサンプルの使用は、フィルタリング・プロセスにおいて無効にされてもよい。
i. 一例では、フィルタリング・プロセスによって必要とされるサンプルが水平VPDU境界より下にある、または仮想境界より下にある場合、それは、利用可能なサンプルからパディングされたもののような仮想サンプルによって置き換えられてもよい。
e. あるいはまた、垂直VPDU境界を越えるサンプルの使用は、フィルタリング・プロセスにおいて無効にされてもよい。
i. 一例では、フィルタリング・プロセスによって必要とされるサンプルが垂直VPDU境界の外側、または仮想境界より下にある場合、それは、利用可能なサンプルからパディングされたもののような仮想サンプルによって置き換えられてもよい。
a. あるいはまた、さらに、両側パディングの概念は、すべてのループ内フィルタの前に、再構成されたサンプルからサンプルをパディングすることを介して適用される。
i. 一例では、フィルタ・サポート内のサンプルがすべてのループ内フィルタの前の再構成されたサンプルからである場合、フィルタ・サポート内の対称な(たとえば、原点、たとえば現在のサンプルに関して対称な)サンプルもまた、すべてのループ内フィルタの前の再構成されたサンプルを使用するものとする。
1. フィルタリングされるべき現在のサンプルの座標が(0,0)であり、(i,j)に位置するサンプルがすべてのループ内フィルタの前の再構成されたサンプルであるとすれば、(-i,-j)に位置するサンプルは、すべてのループ内フィルタの前の再構成されたサンプルである。
2. フィルタリングされるべき現在のサンプルの座標が(x,y)であり、(x+i,y+j)に位置するサンプルがすべてのループ内フィルタの前の再構成されたサンプルであるとすれば、(x-i,y-j)に位置するサンプルはすべてのループ内フィルタの前の再構成されたサンプルである。
b. あるいはまた、さらに、ループ内再整形(In-loop reshaping、LMCSとしても知られる)が有効にされる場合、すべてのループ内フィルタ前の再構成されたサンプルは、再整形されたドメインから変換されたもとのドメイン内のものである。
a. 一例では、サンプルが上記の方法においてパディングされる必要があるとする。パディングを実行する代わりに、そのサンプルに関連するフィルタ係数がゼロに設定される。
i. この場合、フィルタ・サポートは、パディングされることを必要とするサンプルを除外することによって修正される。
ii. あるいはまた、さらに、現在のサンプルを除く他のサンプルに適用されるフィルタ係数は不変に保たれるが、現在のサンプルに適用されるフィルタ係数は、((1<<C_BD)-パディングされる必要のないサンプルに適用されるすべてのフィルタ係数の和)のように修正されてもよく、ここで、C_BDはフィルタ係数のビット深さを示す。
1. 図18A~18Bを例に取ると、ラインLおよびIをフィルタリングするとき、現在のサンプルに適用されるフィルタ係数c12は、((1<<C_BD)-2*(c4+c5+c6+c7+c8+c9+c10+c11))に修正される。
b. 一例では、上記の方法においてサンプル(x1,y1)が(x2,y2)からパディングされるとする。パディングを実行する代わりに、非線形フィルタが有効にされているか無効にされているかにかかわらず、(x1,y1)に関連するフィルタ係数が位置(x2,y2)のフィルタ係数に加算される。
i. あるいはまた、(x2,y2)についてのクリッピング・パラメータがオンザフライで導出されてもよい。
1. 一例では、(x2,y2)についてのデコードされたクリッピング・パラメータと等しく設定されてもよい。
2. あるいはまた、(x1,y1)および(x2,y2)についてのデコードされたクリッピング・パラメータを入力とする関数の戻り値に、たとえば大きいほうの値または小さいほうの値に設定されてもよい。
a. 一例では、異なるクリッピング・パラメータ/フィルタ係数/フィルタ・サポートが、同じクラス・インデックスを有するサンプルに使用されてもよいが、それらのいくつかは、パディングされたサンプルにアクセスすることを必要とし、他のものは必要としない。
b. 一例では、パディングされたサンプルにアクセスすることを必要とするサンプルをフィルタリングするためのクリッピング・パラメータ/フィルタ係数/フィルタ・サポートは、CTU/領域/スライス/タイル・レベルで信号伝達されてもよい。
c. 一例では、パディングされたサンプルにアクセスすることを必要とするサンプルをフィルタリングするためのクリッピング・パラメータ/フィルタ係数/フィルタ・サポートは、パディングされたサンプルにアクセスすることを必要としないサンプルをフィルタリングするために使用されるものから導出されてもよい。
i. 一例では、ブレット9aまたは9bが適用されてもよい。
a. たとえば、「境界にある」の定義は、異なる色成分については異なることがある。一例では、ルーマ・サンプルは、該サンプルと下部境界との間の距離がT1未満であれば下部境界にあり;クロマ・サンプルは、該サンプルと下部境界との間の距離がT2未満であれば下部境界にある。T1とT2は異なっていてもよい。
i. 一例では、カラー・フォーマットが4:4:4でない場合、T1とT2は異なっていてもよい。
a. 一例では、第1段階で、スライス/タイル/ブリックのパディング方法(たとえば、片側パディング)がまず適用される。その後、ALF仮想境界を処理するためのパディング方法(たとえば、両側パディング方法)が、第2段階の間にさらに適用される。この場合、第1段階の後のパディングされたサンプルは、利用可能であるとマークされ、ALF仮想境界プロセスにおいて何個のラインがパディングされるべきかを決定するために使用されてもよい。それらの境界に位置しないCTUを扱うための同じ規則(たとえば、図16A~C)が利用される。
a. 提案された諸方法を適用する境界は、水平境界であってもよい。
b. 提案された諸方法を適用する境界は、垂直境界であってもよい。
a. 一例では、「360仮想境界」がCTU境界と一致する場合、提案される方法が適用されてもよい。たとえば、「360仮想境界」におけるサンプルについては、両側パディング(2-side padding)のみがALFにおいて適用されうる。
b. 一例では、「360仮想境界」がCTU境界と一致しない場合、提案される方法は適用されなくてもよい。たとえば、「360仮想境界」のサンプルについては、片側パディングのみがALFにおいて適用されうる。
c. 一例では、「360仮想境界」の位置に関係なく、「360仮想境界」のサンプルについて同じパディング方法がALFにおいて適用されてもよい。
i. たとえば、「360仮想境界」におけるサンプルについては、片側パディングがALFにおいて適用されてもよい。
ii. たとえば、「360仮想境界」におけるサンプルについては、両側パディングがALFにおいて適用されてもよい。
d. 一例では、少なくとも1つの境界が「360仮想境界」であり、該「360仮想境界」の少なくとも1つがCTU境界と一致しない場合の複数の境界におけるサンプルについて、提案された方法は適用されなくてもよい。
i. たとえば、これらの複数の境界のいずれかを横切るサンプルは、片側パディングによってパディングされてもよい。
1. あるいはまた、さらに、「仮想境界」がある場合、片側パディング後にALFにおいて両側パディングが適用されてもよい。
e. 一例では、2種類の境界の間に位置するサンプルについて、その一方が「360仮想境界」であり、他方がそうでない場合、ALFプロセスにおいて1回だけ、パディングが呼び出される。
i. 一例では、ALF仮想境界を処理するためのパディング方法(たとえば、両側パディング方法)が呼び出されてもよい。
1. あるいはまた、ピクチャー(またはスライス/タイル/ブリック/サブピクチャー)境界を処理するためのパディング方法(たとえば、片側パディング)が呼び出されてもよい。
ii. あるいはまた、2つまたは複数のパディング・プロセスが順番に適用されてもよい。
1. 一例では、ピクチャー(またはスライス/タイル/ブリック/サブピクチャー)境界を処理するためのパディング方法(たとえば、片側パディング)がまず適用されてもよく、その後、ALF仮想境界を処理するためのパディング方法(たとえば、両側パディング方法)がさらに呼び出されてもよい。
a. あるいはまた、さらに、第1のパディング後のパディングされたサンプルは、第2のパディング・プロセスにおいて利用可能なものとして扱われる。
iii. 一例では、2種類以上の境界(たとえば、スライス境界/タイル境界/ブリック境界/360仮想境界/ALF仮想境界/サブピクチャー境界)の間に位置するサンプルについて、境界の一方のみが「360仮想境界」である(たとえば、図24に示されるように、第1の境界は「360仮想境界」であり、第2の境界は「ALF仮想境界」またはスライス/ブリック/タイル境界/サブピクチャー境界;またはその逆)場合、提案される方法が適用されてもよい。たとえば、これらのサンプルについては、両側パディングがALFにおいて適用されてもよい。
1. あるいはまた、これらの複数種類の境界が「360仮想境界」またはピクチャー境界のいずれかである場合、提案される方法は適用されなくてもよい。たとえば、これらのサンプルについては、ALFにおいて片側パディングのみが適用されてもよい。
f. 一例では、2種類以上の境界の間に位置するサンプルについて、それらの境界の少なくとも1つが「360仮想境界」であり、CTU境界と一致しない場合、提案される方法は適用されなくてもよい。
i. この場合、「360仮想境界」でのみサンプルを取り扱うが、他の種類の境界では取り扱わないために先行技術のよう扱われてもよい。
ii. 一例では、これらのサンプルについては、ALFにおいて片側パディングのみが適用されうる。
g. 一例では、2種類以上の境界の間に位置するサンプルについて、それらの境界の少なくとも1つが「360仮想境界」である場合、提案される方法は適用されなくてもよい。
i. この場合、「360仮想境界」でのみサンプルを取り扱うが、他の種類の境界では取り扱わないために先行技術のように扱われてもよい。
ii. 一例では、これらのサンプルについては、ALFにおいて片側パディングのみが適用されてもよい。
a. 一例では、「利用可能でない」参照サンプルは、まずその最も近い「利用可能な」水平位置にクリップされ、次いで、「利用可能でない」参照サンプルは、必要であれば、その最も近い「利用可能な」垂直位置にクリップされる。
b. 一例では、「利用可能でない」参照サンプルは、まずその最も近い「利用可能な」垂直位置にクリップされ、次いで、「利用可能でない」サンプルは、必要であれば、その最も近い「利用可能な」水平位置にクリップされる。
c. 一例では、「利用可能でない」参照サンプルの座標は、水平方向においてその最も近い「利用可能な」サンプル(たとえば、最小距離)の座標にクリップされる。
i. 一例では、座標(x1,y1)および(x2,y2)をもつ2つのサンプルについて、それらの間の水平距離はAbs(x1-x2)として計算されうる。
d. 一例では、「利用可能でない」参照サンプルの座標が、垂直方向におけるその最も近い「利用可能な」サンプル(たとえば、最小の距離)の座標にクリップされる。
i. 一例では、座標(x1,y1)および(x2,y2)をもつ2つのサンプルについて、それらの間の垂直距離はAbs(y1-y2)として計算されうる。
e. 一例では、「利用可能でない」サンプルは、その最も近い「利用可能な」サンプル(たとえば、最小の距離)にクリップされる。
i. 一例では、座標(x1,y1)および(x2,y2)をもつ2つのサンプルについて、それらの間の距離は、(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)として計算されてもよい。
ii. あるいはまた、2つのピクセル間の距離は、Abs(x1-x2)+Abs(y1-y2)として計算されてもよい。
f. 一例では、「利用可能でない」サンプルは、「利用可能な」サンプルが見つかるまで、あらかじめ定義された順序でパディングされうる。図31に例が示されている。ここで、Curは現在のブロック/CU/PU/CTUである。
i. たとえば、垂直方向の「利用可能な」サンプルがまずチェックされ、次いで、水平方向の「利用可能な」サンプルがチェックされてもよい。
ii. たとえば、水平方向の「利用可能な」サンプルがまずチェックされ、次いで、垂直方向の「利用可能な」サンプルがチェックされてもよい。
iii. たとえば、「利用可能でない」左上の近傍サンプル(たとえば、領域「1」内)については、まず、現在のブロック/CU/PU/CTUの左の近傍サンプル(たとえば、領域「4」内)がチェックされ、「利用可能な」サンプルがない場合は、次に、上の近傍サンプル(たとえば、領域「2」内)がチェックされる。左の近傍サンプルにも上の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの左上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
1. あるいはまた、「利用可能でない」左上の近傍サンプルについて、現在のブロック/CU/PU/CTUの上の近傍サンプルがチェックされ、「利用可能な」サンプルがない場合は、左の近傍サンプルがチェックされる。上の近傍サンプルにも左の近傍サンプルにも「利用可能な」サンプルが存在しない場合、現在のブロック/CU/PU/CTUの左上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
iv. たとえば、「利用可能でない」右上の近傍サンプル(たとえば、領域「3」内)については、まず、現在のブロック/CU/PU/CTUの右の近傍サンプル(たとえば、領域「5」内)がチェックされ、「利用可能な」サンプルがない場合は、次に、上の近傍サンプル(たとえば、領域「2」内)がチェックされる。右の近傍サンプルにも上の近傍サンプルにも「利用可能な」サンプルがない場合、現在のブロック/CU/PU/CTUの右上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
1. あるいはまた、「利用可能でない」右上の近傍サンプルについて、まず、現在のブロック/CU/PU/CTUの上の近傍サンプルがチェックされ、「利用可能な」サンプルがない場合は、次に右の近傍サンプルがチェックされる。上の近傍サンプルにも右の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの右上のサンプルが「利用可能でない」サンプルをパディングするために使用される。
v. たとえば、「利用可能でない」左下の近傍サンプル(たとえば、領域「6」内)について、まず、現在のブロック/CU/PU/CTUの左の近傍サンプル(たとえば、領域「4」内)がチェックされ、「利用可能な」サンプルがない場合は、次に、下の近傍サンプル(たとえば、領域「7」内)がチェックされる。左の近傍サンプルにも下の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの左下のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
1. あるいはまた、「利用可能でない」左下の近傍サンプルについて、まず、現在のブロック/CU/PU/CTUの下の近傍サンプルがチェックされ、「利用可能な」サンプルがない場合、次いで、左の近傍サンプルがチェックされる。下の近傍サンプルにも左の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの左下のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
vi. たとえば、「利用可能でない」右下の近傍サンプルについて、まず、現在のブロック/CU/PU/CTUの右の近傍サンプル(たとえば、領域「5」内)がチェックされ、「利用可能な」サンプルがない場合は、次に、下の近傍サンプル(たとえば、領域「7」内)がチェックされる。右の近傍サンプルにも下の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの右下のサンプルが「利用可能でない」サンプルをパディングするために使用される。
1. たとえば、「利用可能でない」右下の近傍サンプルについては、まず、現在のブロック/CU/PU/CTUの下の近傍サンプルがチェックされ、「使用可能」なサンプルがない場合は、次に右の近傍サンプルがチェックされる。下の近傍サンプルにも右の近傍サンプルにも「利用可能な」サンプルがない場合は、現在のブロック/CU/PU/CTUの右下のサンプルが「利用可能でない」サンプルをパディングするために使用される。
vii. 一例では、各近傍領域について、一つまたは複数のサンプルが順番にチェックされうる。あるいはまた、1つだけがチェックされてもよい。
viii. あるいはまた、さらに、チェックのいずれも利用可能なサンプルを見つけることができない場合には、フィルタリングされるべき現在のサンプルの値が代わりに使用されてもよい。
ix. 一例では、「利用可能でない」左上/右上/左下/右下の近傍サンプルについて、それらは常に現在のブロック/CU/PU/CTU内のサンプルによってパディングされてもよい。
1. 一例では、「利用可能でない」左上の近傍サンプル(たとえば、図31の領域「1」内)については、現在のブロック/CU/PU/CTUの左上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
2. 一例では、「利用可能でない」右上の近傍サンプル(たとえば、図31の領域「3」内)については、現在のブロック/CU/PU/CTUの右上のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
3. 一例では、「利用可能でない」左下の近傍サンプル(たとえば、図31の領域「6」内)については、現在のブロック/CU/PU/CTUの左下のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
4. 一例では、「利用可能でない」右下の近傍サンプル(たとえば、図31の領域「8」内)については、現在のブロック/CU/PU/CTUの右下のサンプルが、「利用可能でない」サンプルをパディングするために使用される。
g. あるいはまた、現在のサンプルについて、フィルタリング・プロセスが無効にされる。
h. あるいはまた、ALFにおける分類プロセス(たとえば、現在のサンプルについての勾配計算)は、利用可能でない参照サンプルを使用することを許可されなくてもよい。
a. 一例では、現在のCTUがいかなる種類の境界とも一致しないが、現在のサンプルについてのフィルタリング・プロセス(たとえば、ALF分類/ALFフィルタリング・プロセス)が、異なるビデオ単位(たとえば、スライス)内の参照サンプルにアクセスする必要がある場合、項目16に記載された方法が適用されてもよい。
i. あるいはまた、さらに、現在のCTUがいかなる種類の境界とも一致しないが、現在のサンプルについてのフィルタリング・プロセス(たとえば、ALF分類/ALFフィルタリング・プロセス)が、異なるビデオ単位(たとえば、スライス)内の参照サンプルにアクセスする必要があり、スライス境界をまたぐフィルタリングが許可されない場合、項目16に記載される方法が適用されてもよい。
ii. あるいはまた、さらに、現在のCTUがいかなる種類の境界とも一致しないが、現在のサンプルについてのフィルタリング・プロセス(たとえば、ALF分類/ALFフィルタリング・プロセス)が、異なるビデオ単位(たとえば、スライス)内の参照サンプルおよび同じビデオ単位内の参照サンプルにアクセスする必要があり、スライス境界をまたぐフィルタリングが禁止される場合、項目16に記載された方法が適用されてもよい。
b. 一例では、現在のCTUが少なくとも1種類の境界と一致する場合、統一されたパディング方法(たとえば、両側または片側パディング)が適用されうる。
i. あるいはまた、現在のCTUが複数種類の境界と一致し、それらの境界を越えるフィルタリングが許容されない場合、統一されたパディング方法(たとえば、両側または片側パディング)が適用されうる。
c. 一例では、両側パディングまたは/および片側パディングによってパディングできない「利用可能でない」サンプルのみが、項目16に記載された方法を用いてパディングされてもよい。
a. あるいはまた、あるスライスについて、フィルタリング・プロセスが該スライスについてのスライス境界をまたぐことができるかどうかを示すために、PPS/スライス・ヘッダ内で、1つの構文要素が信号伝達されてもよい。
b. あるいはまた、あるブリック/タイルについて、フィルタリング・プロセスが該ブリック/タイルの境界をまたぐことができるかどうかを示すために、PPSにおいて、1つの構文要素が信号伝達されてもよい。
c. 一例では、構文要素はSPS/PPSにおいて信号伝達されて、フィルタリング・プロセスが、ビデオ/ピクチャーのブリック境界または/およびタイル境界または/およびスライス境界または/および「360度仮想境界」をまたぐことができるかどうかを示すことができる。
i. 一例では、異なる種類の境界について別々の構文要素が信号伝達されてもよい。
ii. 一例では、すべての種類の境界について1つの構文要素が信号伝達されてもよい。
iii. 一例では、いくつかの種類の境界について1つの構文要素が信号伝達されてもよい。
1. たとえば、1つの構文要素が、ブリック境界とタイル境界の両方について信号伝達されてもよい。
d. 一例では、フィルタリング・プロセスに関してPPS/スライス・レベルの指示があるかどうかを示すために、SPSにおいて構文要素が信号伝達されてもよい。
i. 一例では、異なる種類の境界について別々の構文要素が信号伝達されてもよい。
ii. 一例では、すべての種類の境界について1つの構文要素が信号伝達されてもよい。
iii. 一例では、いくつかの種類の境界について1つの構文要素が信号伝達されてもよい。
1. たとえば、1つの構文要素が、ブリック境界とタイル境界の両方について信号伝達されてもよい。
iv. フィルタリング・プロセスがスライス/ブリック/タイル/サブピクチャー境界をまたぐことができるかどうかに関する指示は、SPSにおける対応する構文要素がある値に等しい場合にのみ、PPS/スライス・ヘッダにおいて信号伝達されてもよい。
1. あるいはまた、フィルタリング・プロセスがスライス/ブリック/タイル/サブピクチャー境界をまたぐことができるかどうかに関する指示は、SPSにおける対応する構文要素がある値に等しい場合には、PPS/スライス・ヘッダにおいて信号伝達されなくてもよい。
a. この場合、SPSにおける指示がある値に等しい場合、フィルタリング・プロセスは、スライス/ブリック/タイル/サブピクチャー境界をまたぐことは許されなくてもよい。
b. この場合、フィルタリング・プロセスは、SPSにおける前記指示がある値に等しい場合、スライス/ブリック/タイル/サブピクチャー境界をまたいでもよい。
a. 一例では、(x0-offsetX0,y0-offsetY0)のような左上の領域に位置する代表的なサンプルがチェックされてもよい。
i. 一例では、(offsetX0,offsetY0)は、(1,1)、(2,1)または(1,2)と等しくてもよい。
b. 一例では、(x0+offsetX1,y0-offsetY1)のような右上の領域に位置する代表的なサンプルがチェックされてもよい。
i. 一例では、(offsetX1,offsetY1)は(ctbXSize,1)、(ctbXSize+1,1)または(ctbXSize,2)と等しくてもよい。
c. 一例では、(x0-offsetX2,y0+offsetY2)のような左下の領域に位置する代表的なサンプルがチェックされてもよい。
i. 一例では、(offsetX2,offsetY2)は、(1,ctbYSize)、(2,ctbYSize)または(1,ctbYSize+1)と等しくてもよい。
d. 一例では、(x0+offsetX3,y0+offsetY3)のような右下の領域に位置する代表的なサンプルがチェックされてもよい。
i. 一例では、(offsetX2,offsetY2)は、(ctbXSize,ctbYSize)、(ctbXSize+1,ctbYSize)または(ctbXSize,ctbYSize+1)と等しくてもよい。
e. 一例では、ある領域内の代表的なサンプルが異なるビデオ単位内にあり、異なるビデオ単位のまたがるフィルタリングが許可されない場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
i. 一例では、ある領域内の代表的なサンプルが異なるスライス内にあり、loop_filter_across_slices_enabled_flagが0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
ii. 一例では、ある領域内の代表的なサンプルが異なるブリック内にあり、loop_filter_across_bricks_enabled_flagが0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
iii. 一例では、ある領域内の代表的なサンプルが異なるサブピクチャー内にあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。一例では、SubPicIdxは現在のブロックを含む現在のサブピクチャーのインデックスである。
f. 一例では、K個の領域内のK個の代表的なサンプルのうちのM個が現在のCTUとは異なるビデオ単位にあり、異なるビデオ単位にまたがるフィルタリングが許可されない場合、K個の領域内でアクセスされるサンプルはすべて利用可能でないとしてマークされる。
i. 一例では、Mは1に等しく、Kは2に等しい。
1. たとえば、K個の領域は、左上の近傍領域および右上の近傍領域を含みうる。
2. たとえば、K個の領域は、左上の近傍領域および左下の近傍領域を含みうる。
3. たとえば、K個の領域は、右上の近傍領域および右下の近傍領域を含みうる。
4. たとえば、K個の領域は、左下の近傍領域および右下の近傍領域を含みうる。
5. あるいはまた、Mは2に等しくてもよい。
ii. 一例では、Mは1に等しく、Kは3に等しい。
1. たとえば、K個の領域は、左上、右上および左下の近傍領域を含みうる。
2. たとえば、K個の領域は、左上、右上および右下の近傍領域を含みうる。
3. たとえば、K個の領域は、右上、左下および右下の近傍領域を含みうる。
4. たとえば、K個の領域は、左上、左下および右下の近傍領域を含みうる。
5. あるいはまた、Mは2または3に等しい。
iii. 一例では、Mは1に等しく、Kは4に等しい。たとえば、K個の領域は、左上、右上、左下および右下の近傍領域を含みうる。
1. あるいはまた、Mは1または2または3に等しくてもよい。
iv. 一例では、K個の代表的サンプルのうちのN個(M<=N<=K)をチェックして、現在のCTUとは異なるビデオ単位内に、該N個の代表的サンプルのうちのM個があるかどうかを判定する。
1. 一例では、NはMに等しく、M個の事前に定義された代表的なサンプルのみがチェックされる。
2. たとえば、Mが1に等しく、Kが2に等しい場合、K個の領域は、左上および右上の近傍領域を含んでいてもよく、左上の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、右上の近傍領域の代表的なサンプルのみがチェックされる。
3. たとえば、Mが1に等しく、Kが2に等しい場合、K個の領域は、左下および右下の近傍領域を含んでいてもよく、左下の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、右下の近傍領域の代表的なサンプルのみがチェックされる。
4. たとえば、Mが1に等しく、Kが2に等しい場合、K個の領域は左上および左下の近傍領域であり、左上の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、左下の近傍領域の代表的なサンプルのみがチェックされる。
5. たとえば、Mが1に等しく、Kが2に等しい場合、K個の領域は右上および右下の近傍領域であり、右上の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、右下の近傍領域の代表的なサンプルのみがチェックされる。
6. たとえば、Mが1に等しく、Kが4に等しい場合、K領個の域は左上、右上、左下、右下の近傍領域であり、左上の近傍領域の代表的なサンプルのみがチェックされる。
a. あるいはまた、右下の近傍領域の代表的なサンプルのみがチェックされる。
b. あるいはまた、左下の近傍領域の代表的なサンプルのみがチェックされる。
c. あるいはまた、右上の近傍領域の代表的なサンプルのみがチェックされる。
v. 一例では、ある領域内の代表的なサンプルが異なるスライス内にあり、loop_filter_across_slices_enabled_flagが0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
vi. 一例では、ある領域内の代表的なサンプルが異なるブリック内にあり、loop_filter_across_bricks_enabled_flagが0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。
vii. 一例では、ある領域内の代表的なサンプルが異なるサブピクチャー内にあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合、その領域内でアクセスされるサンプルは利用可能でないとしてマークされる。一例では、SubPicIdxは現在のブロックを含む現在のサブピクチャーのインデックスである。
g. 上記の例では、offsetXi/offsetYi(ここで、iは0~3)は整数である。
i. あるいはまた、さらに、offsetXi/offsetYi(ここで、iは0~3)は、CTUの幅/高さに等しく設定されてもよい。
h. 一例では、現在のブロックはCTUであってもよい。
i. 一例では、現在のブロックはALF処理単位であってもよい。
j. 一例では、現在ブロックは狭いALF処理単位であってもよい。
a. ALFフィルタリングまたは/および分類プロセスにおいて、左上の近傍領域に対してパディングを実行するかどうか、および、上の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
i. 一例では、上の近傍領域が「利用可能でない」としてマークされ、左上の近傍領域が「利用可能」としてマークされる場合、パディングは、上の近傍領域に対しては実行されるが、左上の近傍領域に対しては実行されない。
ii. 一例では、左上の近傍領域が「利用可能でない」としてマークされ、上の近傍領域が「利用可能」としてマークされる場合、パディングは、左上の近傍領域に対しては実行されるが、上の近傍領域に対しては実行されない。
b. ALFフィルタリングまたは/および分類プロセスにおいて、右上の近傍領域に対してパディングを実行するかどうか、および上の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
c. ALFフィルタリングまたは/および分類プロセスにおいて、左上の近傍領域に対してパディングを実行するかどうか、および左の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
d. ALFフィルタリングまたは/および分類プロセスにおいて、左下の近傍領域に対してパディングを実行するかどうか、および左の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
e. ALFフィルタリングまたは/および分類プロセスにおいて、右下の近傍領域に対してパディングを実行するかどうか、および右の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
f. ALFフィルタリングまたは/および分類プロセスにおいて、右上の近傍領域に対してパディングを実行するかどうか、および右の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
g. ALFフィルタリングまたは/および分類プロセスにおいて、右下の近傍領域に対してパディングを実行するかどうか、および下の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
h. ALFフィルタリングまたは/および分類プロセスにおいて、左下の近傍領域に対してパディングを実行するかどうか、および下の近傍領域に対してパディングを実行するかどうかは、異なる仕方で決定されうる。
i. 一例では、左上または/および右上の近傍領域内のサンプルが「利用可能でない」と判定される場合、上の近傍領域内のサンプルは、依然として「利用可能」と判定されうる(たとえば、現在のCTUと同じビデオ単位内にある場合)。たとえば、サンプル・パディングは、ALFフィルタリングまたは/および分類プロセスにおいて上の近傍領域について実行されないことがある。
j. 一例では、左下または/および右下の近傍領域のサンプルが「利用可能でない」と判定される場合、下の近傍領域のサンプルは、依然として「利用可能」と判定されうる(たとえば、現在のCTUと同じビデオ単位内にある場合)。たとえば、ALFフィルタリングまたは/および分類プロセスにおいて、下の近傍領域についてサンプル・パディングが実行されないことがある。
k. 一例では、左上または/および左下の近傍領域内のサンプルが「利用可能でない」と判定される場合、左の近傍領域内のサンプルは、依然として「利用可能」と判定されうる(たとえば、現在のCTUと同じビデオ単位内にある場合)。たとえば、ALFフィルタリングまたは/および分類プロセスにおいて、左の近傍領域についてサンプル・パディングが実行されないことがある。
l. 一例では、右上または/および右下の近傍領域のサンプルが「利用可能でない」と判定される場合、右の近傍領域のサンプルが依然として「利用可能」と判定されることがある(たとえば、現在のCTUと同じビデオ単位内にある場合)。たとえば、サンプル・パディングは、ALFフィルタリングまたは/および分類プロセスにおいて、右の近傍領域について実行されないことがある。
m. 一例では、「利用可能性」チェック方法は、ALF処理単位に適用されてもよい。
n. 一例では、「利用可能性」チェック方法は、狭いALF処理単位に適用されてもよい。
a. 一例では、現在の処理単位内のサンプルが「利用可能でない」(たとえば、現在のCTUとは異なる「ビデオ単位」内にある)場合、それらは、現在のCTU内のサンプルによってパディングされてもよい。
b. 一例では、現在の処理単位の左/右の列が、左/右の近傍サンプルが「利用可能でない」場合に、それらをパディングするために使用されてもよい。
c. 一例では、現在の処理単位の最上行/最下行が、上/下の近傍サンプルが「利用可能でない」場合に、それらをパディングするために使用されてもよい。
d. 一例では、現在の処理単位の左上/右上/左下/右下コーナーサンプルは、左上/右上/左下/右下の近傍サンプルが「利用可能でない」場合に、左上/右上/左下/右下の近傍サンプルをパディングするために使用されてもよい。
e. 一例では、現在のCTUの左上の近傍サンプルが「利用可能でなく」、かつ現在のCTUの上の近傍サンプルが「利用可能」である場合、図32Aに示されるように、上の近傍サンプルが、左上の近傍サンプルをパディングするために使用されてもよい。
f. 一例では、現在のCTUの左上および上の近傍サンプルが両方とも「利用可能でない」場合、図32Cに示されるように、現在のCTUの最上行のサンプルが、まず、上の近傍サンプルをパディングするために使用され、次いで、パディングされた上の近傍サンプルが、左上の近傍サンプルをパディングするために使用されてもよい。
g. 一例では、左上、上および左の近傍サンプルがすべて「利用可能でない」場合は、図32Dに示されるように、現在のCTUの最上段のサンプルがまず、上の近傍サンプルをパディングするために使用されてもよく、次いで、パディングされた上の近傍サンプルが、左上の近傍サンプルをパディングするために使用されてもよい。現在のCTUの左の列が、左の近傍サンプルをパディングするために使用されてもよい。
h. ループフィルタリング(たとえば、ALF)のためのパディングをどのように適用するかは、処理単位(たとえば、ALF処理単位または狭いALF処理単位)に対する、必要とされるサンプル位置が、利用可能でないことに依存しうる。
i. 一例では、現在の処理単位の利用可能でない近傍サンプルは、現在の処理単位内のサンプルにのみ依存してパディングされる。換言すれば、現在の処理単位の利用可能でない近傍サンプルのためのパディング・プロセスは、現在の処理単位の外のどのサンプルからも切り離される。
ii. 一例では、現在の処理単位の左上の近傍サンプルが「利用可能でない」場合、現在の処理単位の左上のサンプルが、そのような「利用可能でない」サンプルをパディングするために使用されてもよい。一例を図33a~dおよび図34に示す。
iii. 一例では、現在の処理単位の右上の近傍サンプルが「利用可能でない」場合、図33a~dおよび図34に示されるように、現在の処理単位の右上のサンプルが、そのような「利用可能でない」サンプルをパディングするために使用されてもよい。
iv. 一例では、現在の処理単位の左下の近傍サンプルが「利用可能でない」場合、図33a~dおよび図34に示されるように、現在の処理単位の左下のサンプルが、そのような「利用可能でない」サンプルをパディングするために使用されてもよい。
v. 一例では、現在の処理単位の右上の近傍サンプルが「利用可能でない」場合、図33a~dおよび図34に示されるように、現在の処理単位の右上のサンプルが、そのような「利用可能でない」サンプルをパディングするために使用されてもよい。
i. 一例では、近傍サンプルが異なるスライス/タイル/ブリック/サブピクチャー/360ビデオ仮想境界内にある場合、またはピクチャー境界の外側にある場合、そのサンプルは利用可能でないとしてマークされる。
i. あるいはまた、利用可能でないサンプルの決定は、上記の諸項目を用いて定義されてもよい。
j. 一例では、上記の方法は、フィルタリング・プロセス中に適用されるが、分類プロセス中には適用されないのでもよい。
i. あるいはまた、上記の方法は、フィルタリング・プロセスおよび分類プロセスの間に適用されてもよい。
ii. あるいはまた、上記の方法は、フィルタリング・プロセスおよび分類プロセスの間に適用されてもよい。
a. 処理単位の上の近傍サンプルが利用可能でない場合、それらは処理単位の最上段を用いてパディングされてもよい。
i. あるいはまた、さらに、左上の近傍サンプルは、処理単位の左上のサンプルをパディングされてもよい。
ii. あるいはまた、さらに、右上の近傍サンプルは、処理単位の右上のサンプルをパディングされてもよい。
b. 処理単位の下の近傍サンプルが利用可能でない場合、それらは、処理単位の最下行をパディングされてもよい。
i. あるいはまた、さらに、左下の近傍サンプルは、処理単位の左下のサンプルをパディングされてもよい。
ii. あるいはまた、さらに、右下の近傍サンプルは、処理単位の右下のサンプルをパディングされてもよい。
c. 処理単位の左近傍サンプルが利用可能でない場合、それらは、処理単位の左列をパディングされてもよい。
d. 処理単位の右の近傍サンプルが利用可能でない場合、それらは処理単位の右列をパディングされてもよい。
e. 処理単位の左の近傍サンプルおよび上の近傍サンプルが利用可能であり、処理単位の左上の近傍サンプルが利用可能でないである場合、左上の近傍サンプルは、処理単位の左上のサンプルをパディングされてもよい。
f. 処理単位の右の近傍サンプルおよび下の近傍サンプルが利用可能であり、処理単位の右下の近傍サンプルが利用可能でないである場合、右の近傍サンプルは、処理単位の右下のサンプルをパディングされてもよい。
g. 処理単位は、ctuUpで示されるCTUのN個(Nは整数、たとえばN=4)行と、前記ctuUPの下のctuDownで示されるCtbSize-M(Mは整数、たとえばM=N)行とを含むことができる。処理単位の近傍サンプルが利用可能であるかどうかをチェックするときは、ctuDownが使用されてもよい。
i. 一例では、近傍サンプルがctuDownとは異なるビデオ単位内にあり(たとえば、近傍サンプルとctuDownが異なるブリック/タイル/スライス/サブピクチャーに属するか、またはそれらが360の仮想境界の異なる側にある)、そのようなビデオ単位を横切るフィルタリングが許可されない場合、それは「利用可能でない」とみなされる。
ii. あるいはまた、近傍サンプルの利用可能性をチェックするために、ctuUpが使用されてもよい。
h. 繰り返しパディングが、ALF仮想境界を除くすべての境界に適用されてもよい。
i. あるいはまた、繰り返しパディングが、すべての境界に適用されてもよい。
ii. あるいはまた、繰り返しパディングが、すべての水平境界に適用されてもよい。
iii. あるいはまた、繰り返しパディングが、すべての垂直境界に適用されてもよい。
iv. あるいはまた、ミラーリングされたパディングが、すべての水平境界に適用されてもよい。
v. あるいはまた、ミラーリングされたパディングが、すべての垂直境界に適用されてもよい。
i. 一例では、処理単位は、一つまたは複数のブリック/スライス/タイル/サブピクチャー境界または/および360仮想境界がこれに交差し、そのような境界を横切るフィルタリングが許されない場合、その処理単位は、複数の処理単位に(水平にまたは垂直に)分割されてもよい。
i. あるいはまた、さらに、分割プロセスは、どんなブリック/スライス/タイル/サブピクチャー境界または/および360仮想境界またはALF仮想境界もどの処理単位にも交差しなくなるまで、リクルーシブに(reclusively)実行されてもよく、ここで、そのような境界を横断するフィルタリング・プロセスは禁止される。たとえば、そのような境界は処理単位の境界でしかありえない。そのような処理単位は、以下、「基本ALF処理単位」と呼ぶ。
ii. あるいはまた、さらに、ALFプロセスは、そのような分割プロセスが終了した後に実行される、たとえば、ALFプロセスは、「基本ALF処理単位」に対して実行される。
iii. あるいはまた、さらに、上記のパディング方法が、「基本ALF処理単位」に対して実行されてもよい。
a. あるいはまた、上記の提案される諸方法は、現在ブロック外のサンプルにアクセスすることを必要とする他のコーディングツール(非フィルタリング方法)に適用されうる。
b. 上記の提案される諸方法はCC-ALF(cross-component adaptive loop filter[成分横断適応ループ・フィルタ])に適用されうる。
a. 一例では、考慮ピクチャー(または出力ピクチャー/適合窓/スケーリング窓)の外側のサンプルは、フィルタ・オン/オフ・フラグの信号伝達される値にかかわらず、フィルタリングされることが禁止されてもよい。
a. DPS/SPS/VPS/PPS/APS/ピクチャーヘッダ/スライス・ヘッダ/タイル・グループ・ヘッダ/最大コーディング単位(Largest coding unit、LCU)/コーディング単位(CU)/LCU行/LCUのグループ/TU/PUブロック/ビデオコーディング単位において信号伝達されるメッセージ
b. CU/PU/TU/ブロック/ビデオコーディング単位の位置
c. 現在ブロックおよび/またはその近傍ブロックのブロック寸法
d. 現在ブロックおよび/またはその近傍ブロックのブロック形状
e. 現在ブロックおよび/またはその近傍ブロックのコーディングされた情報
f. カラー・フォーマットの指示(4:2:0、4:4:4など)
g. コーディングツリー構造
h. スライス/タイルグループタイプおよび/またはピクチャータイプ
i. 色成分(たとえば、クロマ成分またはルーマ成分にのみ適用されることがある)
j. 時間レイヤーID
k. 規格のプロファイル/レベル/階層
以下の諸セクションでは、開示された技術のいくつかの実施形態を受け入れるように、VVC規格の現行バージョンがどのように修正されるかのいくつかの例が記載される。新たに追加された部分は、太字のイタリック体の下線付きテキストで示される〔便宜上、単に下線で示すこともある〕。削除された部分は[[]]を使って示される。
loop_filter_across_bricks_enabled_flagが1に等しいことは、PPSを参照するピクチャーにおいて、ループ内フィルタリング動作がブリック境界をまたいで実行されうることを指定する。loop_filter_across_bricks_enabled_flagが0に等しいことは、PPSを参照するピクチャーにおいて、ループ内フィルタリング動作がブリック境界をまたいで実行されないことを指定する。ループ内フィルタリング動作は、ブロッキング解除フィルタ、サンプル適応オフセット・フィルタ[[、および適応ループ・フィルタ]]動作を含む。存在しない場合、loop_filter_across_bricks_enabled_flagの値は1に等しいと推定される。
loop_filter_across_slices_enabled_flagが1に等しいことは、PPSを参照するピクチャーにおいて、ループ内フィルタリング動作がスライス境界をまたいで実行されうることを指定する。loop_filter_across_slices_enabled_flagが0に等しいことは、PPSを参照するピクチャーにおいて、ループ内フィルタリング動作がスライス境界をまたいで実行されないことを指定する。ループ内フィルタリング動作は、ブロッキング解除フィルタ、サンプル適応オフセット・フィルタ[[、および適応ループ・フィルタ]]動作を含む。存在しない場合、loop_filter_across_slices_enabled_flagの値は0に等しいと推定される。
図21は、ピクチャーにおけるCTUの処理を示す。図19と比べた相違は、破線でハイライトされている。
8.8.5.2 ルーマ・サンプルについてのコーディングツリー・ブロック・フィルタリング・プロセス
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタ処理され再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・filtIdx[x][y]によって指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]およびルーマ・クリッピング値の配列c[j]は、j=0..11として、次のように導出される:
・……
・ルーマ・フィルタ係数およびクリッピング値インデックスidxは、transposeIdx[x][y]に依存して、次のように導出される:
・……
・i,j=-3..3として、ルーマ・サンプルの所与の配列recPicture内の対応するルーマ・サンプル(x,y)のそれぞれについての位置(hx+i,vy+j)は次のように導出される:
・……
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件[[のうち一つまたは複数]]が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
[[・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。]]
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。
・再構成されたサンプル・オフセットr1、r2、およびr3は、水平方向ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
・……
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマコーディングツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1230)
ctbHeightC=CtbSizeY/SubHeightC (8-1231)
フィルタ処理された再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマコーディングツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1、y=0..ctbHeightC-1として、次のようにフィルタリングされる:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・以下の条件[[のうち一つまたは複数]]が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・[[現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。]]
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。
・再構成されたサンプル・オフセットr1、r2は、水平方向ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
……
この実施形態は、ALF分類プロセス(セクション4におけるブレット7に対応)において、VPDU領域より下のサンプルを使用することを禁止する例を示す。
このプロセスの入力は以下の通り:
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)、
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL。
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、またはxとyの両方が不均一な数である場合、次が適用される:
2. 変数minY、maxYおよびacは次のように導出される:
・変数hv1、hv0およびdirHVは次のように導出される:
……
・変数d1、d0およびdirDは次のように導出される:
……
5. 変数avgVar[x][y]は、x,y=0..CtbSizeY-1として、次のように導出される:
複数の種類の境界(たとえば、スライス/ブリック境界、360度の仮想境界)に位置するサンプルについて、パディング・プロセスは1回だけ呼び出される。そして、1つの側あたり何個のラインがパディングされるかは、境界に対する現在のサンプルの位置に依存する。
8.8.5.2 ルーマ・サンプルについてのコーディングツリー・ブロック・フィルタリング・プロセス
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタ処理され再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・i,j=-3..3として、ルーマ・サンプルの所与の配列〔アレイ〕recPicture内の対応するルーマサンプル(x,y)のそれぞれの位置(hx+i,vy+j)は以下のように導かれる:
・pps_loop_filter_across_virtual_boundises_disabled_flagが1に等しく、xCtb+x-PpsVirtualBoundariesPosX[n]が任意のn=0..pps_num_ver_virtual_boundies-1について0以上3未満である場合、以下が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1197)
・それ以外の場合、pps_loop_filter_across_virtual_boundises_disabled_flagが1に等しく、かつ任意のn=0..pps_num_ver_virtual_boundies-1についてPpsVirtualBoundariesPox[n]-xCtb-xが0より大きく4未満である場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1198)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1199)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1200)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4より小さい場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1201)]]
・[[それ以外の場合、]]次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1202)
・[[変数applyVirtualBoundaryは次のように導出される:
・以下の条件の一つまたは複数が真である場合、applyVirtualBoundaryは0に設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に設定される。]]
・変数boundaryPos1およびboundaryPos2は、yCtbはyCtbに等しく、yはyに等しいとして8.8.5.5で指定されているルーマ・サンプルについての垂直境界位置導出プロセスを呼び出すことによって導出される。
このプロセスの入力は以下の通り:
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)、
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL。
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_ver_virtual_boundies-1についてxCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1208)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_ver_virtual_boundies-1についてPpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく6より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1209)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1210)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundies-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1211)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundies-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1212)
・それ以外の場合、次が適用される:
・yCtb+CtbSizeYがpic_height_in_luma_samples以上である場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・それ以外の場合、yがCtbSizeY-4より小さい場合、次が適用される:
vy+j=Clip3(0,yCtb+CtbSizeY-5,yCtb+y+j) (8-1214)
・それ以外の場合、次が適用される:
vy+j=Clip3(yCtb+CtbSizeY-4,pic_height_in_luma_samples-1,yCtb+y+j) (8-1215)]]
・変数boundaryPos1およびboundaryPos2は、yCtbはyCtbに等しく、yはyに等しいとして8.8.5.5で指定されているルーマ・サンプルについての垂直境界位置導出プロセスを呼び出すことによって導出される。
・boundaryPos1が-1に等しく、boundaryPos2が-1に等しい場合、次が適用される:
h x+i =Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1211)
・それ以外の場合、boundaryPos1が-1に等しくなく、boundaryPos2が-1に等しい場合、次が適用される:
・yがboundaryPos1より小さい場合、次が適用される:
v y+j =Clip3(0,yCtb+boundaryPos1-1,yCtb+y+j) (8-1215)
・それ以外の場合、yがboundaryPos1以上である場合、次が適用される:
v y+j =Clip3(yCtb+boundaryPos1,pic_height_in_luma_samples-1,yCtb+y+j) (8-1216)
・それ以外の場合(boundaryPos1が-1に等しくなく、boundaryPos2が-1に等しくない場合)、次が適用される:
・yがboundaryPos1より小さい場合、次が適用される:
v y+j =Clip3(0,yCtb+boundaryPos1-1,yCtb+y+j) (8-1215)
・それ以外の場合、yがboundaryPos2以上である場合、次が適用される:
v y+j =Clip3(yCtb+boundaryPos2,pic_height_in_luma_samples-1,yCtb+y+j) (8-1216)
・それ以外の場合(yがboundaryPos1より大きくboundaryPos2以下)、次が適用される:
v y+j =Clip3(yCtb+boundaryPos1,yCtb+boundaryPos2-1,yCtb+y+j) (8-1216)
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、またはxとyの両方が非偶数である場合、次が適用される:
・(y<<2)が(CtbSizeY-8)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは-2に設定され、maxYは3に設定され、acは96に等しく設定される。
・それ以外の場合、(y<<2)が(CtbSizeY-4)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。
・変数boundaryPos1およびboundaryPos2は、yCtbはyCtbに等しく、yはyに等しいとして、8.8.5.5で指定されているルーマ・サンプルについての垂直境界位置導出プロセスを呼び出すことによって導出される。
・boundaryPos1が-1に等しくなく、boundaryPos2が-1に等しい場合、次が適用される:
・yがboundaryPos1-4に等しい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acは96に等しく設定される。
・それ以外の場合、yがboundaryPos1に等しい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。
・それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され、acは64に等しく設定される。
・それ以外の場合、boundaryPos1が-1に等しくなく、boundaryPos2が-1に等しくない場合、次が適用される:
・yがboundaryPos1-4に等しい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acが96に等しく設定される。
・それ以外の場合、yがboundaryPos2に等しい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。
・それ以外の場合、yがboundaryPos1に等しく、boundaryPos2がboundaryPos2+8以上である場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。
・それ以外の場合、yがboundaryPos1に等しく、boundaryPos2がboundaryPos2+4に等しい場合、minYは0に等しく設定され、maxYは3に等しく設定され、acは128に等しく設定される。
・それ以外の場合、yがboundaryPos2-4に等しく、boundaryPos2がboundaryPos2+8より大きい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acは96に等しく設定される。
・それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され、acは64に等しく設定される。
・それ以外の場合(boundaryPos1は-1に等しく、boundaryPos2は-1に等しい)、minYは-2に等しく設定され、maxYは5に等しく設定され、acは64に等しく設定される。
・[[それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され、acは64に等しく設定される。]]
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされ再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマコーディングツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1245)
ctbHeightC=CtbSizeY/SubHeightC (8-1246)
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_ver_virtual_boundaries-1についてxCtbC+x-PpsVirtualBoundariesPosX[n]/SubWidthCが0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n]/SubWidthC,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1247)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_ver_virtual_boundaries-1についてPpsVirtualBoundariesPosX[n]/SubWidthC-xCtbC-xが0より大きく3より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]/SubWidthC-1,xCtbC+x+i) (8-1248)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1249)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてyCtb+y-PpsVirtualBoundariesPosY[n]/SubHeightCが0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n]/SubHeightC,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1250)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてPpsVirtualBoundariesPosY[n]/SubHeightC-yCtbC-yが0より大きく3より小さい場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]/SubHeightC-1,yCtbC+y+j) (8-1251)
・それ以外の場合、]]次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1252)
・[[変数applyVirtualBoundaryは次のように導出される:
・以下の条件の一つまたは複数が真である場合、applyVirtualBoundaryは0に設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に設定される。]]
・変数boundaryPos1およびboundaryPos2は、yCtbはyCtbに等しく、yはyに等しいとして、8.8.5.5で指定されているルーマ・サンプルについての垂直境界位置導出プロセスを呼び出すことによって導出される。
・変数boundaryPos1は、boundaryPos1/SubWidthCに等しく設定される。
・変数boundaryPos2は、boundaryPos2/SubWidthCに等しく設定される。
・再構成されたサンプル・オフセットr1およびr2は、水平ルーマ・サンプル位置yおよびapplyVirtualBoundaryに従ってテーブル8-24において指定される。
・変数currは次のように導出される:
curr=recPicture[hx,vy] (8-1253)
・クロマ・フィルタ係数の配列f[j]とクロマ・クリッピング値の配列c[j]は、j=0..5として、次のように導出される:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][j] (8-1254)
c[j]=AlfClipC[slice_alf_aps_id_chroma][j] (8-1255)
・変数sumは次のように導出される:
・pcm_loop_filter_disabled_flagおよびpcm_flag[(xCtbC+x)*SubWidthC][(yCtbC+y)*SubHeightC]がどちらも1に等しい場合、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=recPictureL[hx,vy] (8-1258)
・それ以外の場合(pcm_loop_filter_disabled_flagが0に等しい、またはpcm_flag[x][y]が0に等しい)、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum) (8-1259)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマコーディングツリー・ブロックの左上のサンプルの垂直位置を指定するルーマ位置yCtb。
・現在のルーマコーディングツリー・ブロックの左上のサンプルに対する現在のピクセルの垂直位置を指定するルーマ位置y。
このプロセスの出力は以下の通り:
・上の垂直境界位置boundaryPos1。
・下の垂直境界位置boundaryPos2。
・変数boundaryPos1は次のように導出される:
・変数boundaryPos1が-1に設定される。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、次が適用される:
boundaryPos1=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、任意のn=0..pps_num_hor_virtual_boundaries-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4より小さい場合、次が適用される:
boundaryPos1=PpsVirtualBoundariesPosY[n] (8-1201)
・変数boundaryPos2は次のように導出される:
・変数boundaryPos2が-1に設定される。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合、次が適用される:
・CtbSizeY-yが4より小さい場合、変数boundaryPos2はCtbSizeYに等しく設定される。
・それ以外の場合、現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合、次が適用される:
・CtbSizeY-yが4より小さい場合、変数boundaryPos2はCtbSizeYに等しく設定される。
・それ以外の場合、現在のコーディングツリー・ブロックの上部境界がブリックの上部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合、次が適用される:
・yが3より小さい場合、変数boundaryPos2は0に設定される。
・それ以外の場合、現在のコーディングツリー・ブロックの上部境界がスライスの上部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合、次が適用される:
・yが3より小さい場合、変数boundaryPos2は0に設定される。
・変数boundaryPos1が-1に等しい場合、次が適用される:
・変数boundaryPos1は、boundaryPos2に等しい。
・変数boundaryPos2は-1に等しい。
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうち一つまたは複数が真である場合、applyVirtualBoundaryは0に等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・それ以外の場合、applyVirtualBoundaryは1に設定される。
・applyVirtualBoundaryが1に等しい場合、次が適用される:
・boundaryPos1が-1に等しい場合、boundaryPos1はCtbSizeY-4に等しく設定される。
・それ以外の場合、boundaryPos2が-1に等しい場合、boundaryPos2はCtbSizeY-4に等しく設定される。
・boundaryPos1が-1に等しくなく、boundaryPos1が-1に等しくない場合、次が適用される:
・boundaryPos1がboundaryPos2に等しい場合、boundaryPos2は-1に等しく設定される。
・それ以外の場合、boundaryPos1がboundaryPos2より大きい場合、次が適用される:
・変数tmpPosは、boundaryPos2に等しく設定される。
・変数boundaryPos2は、boundaryPos1に等しく設定される。
変数boundaryPos1は、tmpPosに等しく設定される。
CTUについて、いかなる境界(たとえば、ピクチャー/スライス/タイル/ブリック/サブピクチャー境界)とも一致しないことがある。しかしながら、現在の単位(ピクチャー/スライス/タイル/ブリック/サブピクチャーなど)の外側のサンプルにアクセスする必要があることがある。スライス境界をまたぐフィルタリング(たとえば、loop_filter_across_slices_enabled_flagが偽)が無効にされている場合は、現在の単位の外側のサンプルをパディングする必要がある。
この実施形態では、以下の主な考え方が適用される:
・ピクチャーにおける最後のCTU行に位置しないCTU(たとえば、CTUの下部境界がピクチャーの下部境界ではない、またはピクチャーの下部境界を越える)については、ALF仮想境界が有効にされる。すなわち、1つのCTUが2つ以上の部分に分割されてもよく、1つの部分のサンプルが別の部分のサンプルを使用することはできない。
・ピクチャーにおける最後のCTU行に位置するCTU(たとえば、CTUの下部境界がピクチャーの下部境界である、またはピクチャーの下部境界を越える)については、ALF仮想境界が有効にされる。すなわち、1つのCTUが2つ以上の部分に分割されてもよく、1つの部分のサンプルが別の部分のサンプルを使用することはできない。
・1つの境界(または複数種類の境界)におけるサンプルについて、その境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために、片側パディングが実行される。
・CTU境界と一致するスライス/タイル/ブリック/サブピクチャー境界または「360仮想境界」である1つの境界(または複数種類の境界)におけるサンプルについては、境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために両側パディングが実行される。
・CTU境界と一致しないピクチャー境界または「360仮想境界」である1つの境界(または複数種類の境界)におけるサンプルについては、境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために片側パディングが実行される。
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタリングされ再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・filtIdx[x][y]によって指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]およびルーマ・クリッピング値の配列c[j]は、j=0..11として、次のように導出される:
vy+j=Clip3(SubPicTopBoundaryPos,SubPicBotBoundaryPos,vy+j) (8-1184)
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうちの一つまたは複数が真である場合、applyVirtualBoundaryは0に設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在のコーディングツリー・ブロックの下部境界はブリックの下部境界であり、loop_filter_across_bricks_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの下部境界はスライスの下部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの下部境界はサブピクチャーの下部境界であり、位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]は0に等しい。
・現在のコーディングツリー・ブロックの下部境界は、ピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagは1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。]]
・再構成されたサンプル・オフセットr1,r2,r3は、水平ルーマ・サンプル位置yおよびclipTopPosおよびclipBottomPos[[applyVirtualBoundary]]に従って、テーブル8-24において指定される。
・再構成されたサンプル・オフセットc1,c2,c3は、垂直ルーマ・サンプル位置xおよびclipLeftPosおよびclipRightPosに従って、テーブル8-25において指定される。
・変数currは次のように導出される:
curr=recPictureL[hx,vy] (8-1203)
このプロセスの入力は以下の通り:
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)、
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL。
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundies-1についてxCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1208)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundies-1についてPpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく6より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1209)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1210)
・[[位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
hx+i=Clip3(SubPicLeftBoundaryPos,SubPicRightBoundaryPos,hx+i) (8-1184)]]
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundies-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1211)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundies-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1212)
・それ以外の場合、次が適用される:
・yCtb+CtbSizeYがpic_height_in_luma_samples以上である場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・[[それ以外の場合、yがCtbSizeY-4より小さい場合、次が適用される:
vy+j=Clip3(0,yCtb+CtbSizeY-5,yCtb+y+j) (8-1214)
・それ以外の場合、次が適用される:
vy+j=Clip3(yCtb+CtbSizeY-4,pic_height_in_luma_samples-1,yCtb+y+j) (8-1215)
・位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
vy+j=Clip3(SubPicTopBoundaryPos,SubPicBotBoundaryPos,vy+j) (8-1184)]]
・clipTopPosが-128に等しくない場合、次が適用される:
v y+j =Clip3(clipTopPos,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・clipBottomPosが-128に等しくない場合、次が適用される:
v y+j =Clip3(0,clipBottomPos-1,yCtb+y+j) (8-1213)
・clipLeftPosが-128に等しくない場合、次が適用される:
h x+i =Clip3(clipLeftPos,pic_width_in_luma_samples-1,xCtb+x+i) (8-1213)
・clipRightPosが-128に等しくない場合、次が適用される:
h x+i =Clip3(0,clipRightPos-1,xCtb+x+i) (8-1213)〕
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、またはxとyの両方が不均一な数である場合、次が適用される:
2. [[変数minY、maxYおよびacは次のように導出される:
・(y<<2)が(CtbSizeY-8)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acは96に等しく設定される。
・それ以外の場合、(y<<2)が(CtbSizeY-4)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。]]
3. 変数sumH[x][y]、sumV[x][y]、sumD0[x][y]、sumD1[x][y]、sumOfHV[x][y]は、x、y=0..(CtbSizeY-1)>>2として、次のように導出される:
varTab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4} (8-1242)
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*ac)>>(3+BitDepthY))] (8-1243)
6. 分類フィルタ・インデックス配列filtIdx[x][y]および転置インデックス配列transposeIdx[x][y]は、x=y=0..CtbSizeY-1として、次のように導出される:
transposeTable[ ]={0,1,0,2,2,3,1,3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0に等しくない場合、filtIdx[x][y]は次のように修正される:
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5 (8-1244)
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマコーディングツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1245)
ctbHeightC=CtbSizeY/SubHeightC (8-1246)
フィルタリングされた再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマコーディングツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1、y=0..ctbHeightC-1として、次のようにフィルタリングされる:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
vy+j=Clip3(SubPicTopBoundaryPos/SubWidthC,SubPicBotBoundaryPos/SubWidthC,vy+j) (8-1184)
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうち一つまたは複数が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がサブピクチャーの下部境界であり、位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい。
・現在のコーディングツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。]]
・変数clipTopPosは、clipLeftPos/SubWidthCに等しく設定される。
・変数clipBottomPosは、clipRightPos/SubWidthCに等しく設定される。
・変数clipTopPosは、clipTopPos/SubWidthCに等しく設定される。
・変数clipBottomPosは、clipBottomPos/SubWidthCに等しく設定される。
・再構成されたサンプル・オフセットr1およびr2は、水平ルーマ・サンプル位置y、clipTopPosおよびclipBottomPos[[およびapplyVirtualBoundary]]に従ってテーブル8-27において指定される。
・再構成されたサンプル・オフセットc1およびc2は、垂直ルーマ・サンプル位置x、clipLeftPosおよびclipRightPosに従ってテーブル8-28において指定される。
・変数currは次のように導出される:
curr=recPicture[hx,vy] (8-1253)
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][j] (8-1254)
c[j]=AlfClipC[slice_alf_aps_id_chroma][j] (8-1255)
・変数sumは次のように導出される:
・pcm_loop_filter_disabled_flagおよびpcm_flag[(xCtbC+x)*SubWidthC][(yCtbC+y)*SubHeightC]が両方とも1に等しい場合、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=recPictureL[hx,vy] (8-1258)
・それ以外の場合(pcm_loop_filter_disabled_flagが0に等しい、またはpcm_flag[x][y]が0に等しい)、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum) (8-1259)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・現在のルーマコーディングツリー・ブロックの左上のサンプルに対して現在のサンプルを指定するルーマ位置(x,y)。
このプロセスの出力は以下の通り:
・左垂直境界位置clipLeftPos
・右垂直境界位置clipRightPos
・上水平境界位置clipTopPos
・下水平境界位置clipBottomPos
変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPosは-128に設定される。
変数clipTopPosは次のように修正される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、y-(CtbSizeY-4)が0以上である場合、変数clipTopPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1または0に等しくなく、yCtb+y-PpsVirtualBoundariesPosY[n]が任意のn=0..pps_num_hor_virtual_boundaries-1について0以上3未満である場合、次が適用される:
clipTopPos=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、yが3未満であり、現在のコーディングツリー・ブロックの上部境界がピクチャーの上部境界ではなく、次の条件のいずれかが真である場合、変数clipTopPosはyCtbに等しく設定される:
・現在のコーディングツリー・ブロックの上部境界がブリックの上部境界である場合、loop_filter_across_bricks_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの上部境界がスライスの上部境界である場合、loop_filter_across_slices_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの上部境界が、サブピクチャーの上部境界に等しい場合、loop_filter_across_sub_pic_enabled_flagは0に等しい。
変数clipBottomPosは次のように修正される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、CtbSizeY-4-yが0より大きく4より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1または0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが任意のn=0..pps_num_hor_virtual_boundaries-1について0より大きく4より小さい場合、次が適用される:
clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、CtbSizeY-yが4未満であり、現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、次の条件のうちの1つが真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しく設定される。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がサブピクチャーの下部境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。
変数clipLeftPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYは0に等しく、PpsVirtualBoundariesPosX[n]はpic_width_in_luma_samples-1または0に等しくなく、xCtb+x-PpsVirtualBoundariesPosX[n]は任意のn=0..pps_num_ver_virtual_boundaries-1について0以上3未満である場合、次が適用される:
clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1201)
・それ以外の場合、xが3未満であり、現在のコーディングツリー・ブロックの左境界がピクチャーの左境界ではなく、次の条件のうちいずれかが真である場合、変数clipLeftPosはxCtbに等しく設定される。
・現在のコーディングツリー・ブロックの左境界がブリックの左境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの左境界がスライスの左境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの左境界がサブピクチャーの左境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。
変数clipRightPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYは0に等しく、PpsVirtualBoundariesPosX[n]はpic_width_in_luma_samples-1または0に等しくなく、PpsVirtualBoundariesPosX[n]-xCtb-xは任意のn=0..pps_num_ver_virtual_boundaries-1について0より大きく4より小さい場合、次が適用される:
clipRightPos=PpsVirtualBoundariesPosX[n] (8-1201)
・それ以外の場合、CtbSizeY-xが4未満であり、現在のコーディングツリー・ブロックの右境界がピクチャーの右境界ではなく、次の条件のうちの1つが真である場合、変数clipRightPosはxCtb+CtbSizeYに等しく設定される。
・現在のコーディングツリー・ブロックの右境界がブリックの右境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの右境界がスライスの右境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの右境界がサブピクチャーの右境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。〕
この実施形態では、以下の主な考え方が適用される:
・ピクチャーにおける最後のCTU行に位置しないCTU(たとえば、CTUの下部境界がピクチャーの下部境界ではない、またはピクチャーの下部境界を越える)については、ALF仮想境界が有効にされる。すなわち、1つのCTUが2つ以上の部分に分割されてもよく、1つの部分のサンプルが別の部分のサンプルを使用することはできない。
・ピクチャーにおける最後のCTU行に位置するCTU(たとえば、CTUの下部境界がピクチャーの下部境界である、またはピクチャーの下部境界を越える)については、ALF仮想境界が有効にされる。すなわち、1つのCTUが2つ以上の部分に分割されてもよく、1つの部分のサンプルが別の部分のサンプルを使用することはできない。
・1つの境界(または複数種類の境界)におけるサンプルについて、その境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために、片側パディングが実行される。
・CTU境界と一致するスライス/タイル/ブリック/サブピクチャー境界または「360仮想境界」である1つの境界(または複数種類の境界)におけるサンプルについては、境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために両側パディングが実行される。
・CTU境界と一致しないピクチャー境界または「360仮想境界」である1つの境界(または複数種類の境界)におけるサンプルについては、境界を越えた近傍サンプルが使用されることが禁止される場合、そのような近傍サンプルをパディングするために片側パディングが実行される。
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタリングされ再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・filtIdx[x][y]によって指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]およびルーマ・クリッピング値の配列c[j]は、j=0..11として、次のように導出される:
・以下の条件のうちの一つまたは複数が真である場合、applyVirtualBoundaryは0に設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在のコーディングツリー・ブロックの下部境界はブリックの下部境界であり、loop_filter_across_bricks_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの下部境界はスライスの下部境界であり、loop_filter_across_slices_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの下部境界はサブピクチャーの下部境界であり、位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]は0に等しい。
・現在のコーディングツリー・ブロックの下部境界は、ピクチャーの下部仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagは1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。]]
curr=recPictureL[hx,vy] (8-1203)
このプロセスの入力は以下の通り:
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)、
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL。
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundies-1についてxCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1208)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundies-1についてPpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく6より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1209)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1210)
・[[位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
hx+i=Clip3(SubPicLeftBoundaryPos,SubPicRightBoundaryPos,hx+i) (8-1184)]]
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundies-1についてyCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1211)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1212)
・それ以外の場合、次が適用される:
・[[yCtb+CtbSizeYがpic_height_in_luma_samples以上である場合、次が適用される:]]
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・[[それ以外の場合、yがCtbSizeY-4より小さい場合、次が適用される:
vy+j=Clip3(0,yCtb+CtbSizeY-5,yCtb+y+j) (8-1214)
・それ以外の場合、次が適用される:
vy+j=Clip3(yCtb+CtbSizeY-4,pic_height_in_luma_samples-1,yCtb+y+j) (8-1215)
・位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
vy+j=Clip3(SubPicTopBoundaryPos,SubPicBotBoundaryPos,vy+j) (8-1184)]]
・変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPosは、ALF境界位置導出プロセスを(xCtb,yCtb)および(x,y)を用いて呼び出すことによって導出される。
・clipTopPosが-128に等しくない場合、次が適用される:
v y+j =Clip3(clipTopPos,pic_height_in_luma_samples-1,yCtb+y+j) (8-1213)
・clipBottomPosが-128に等しくない場合、次が適用される:
v y+j =Clip3(0,clipBottomPos-1,yCtb+y+j) (8-1213)
・clipLeftPosが-128に等しくない場合、次が適用される:
h x+i =Clip3(clipLeftPos,pic_width_in_luma_samples-1,xCtb+x+i) (8-1213)
・clipRightPosが-128に等しくない場合、次が適用される:
h x+i =Clip3(0,clipRightPos-1,xCtb+x+i) (8-1213)
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、またはxとyの両方が不均一な数である場合、次が適用される:
2. [[変数minY、maxYおよびacは次のように導出される:
・(y<<2)が(CtbSizeY-8)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは-2に等しく設定され、maxYは3に等しく設定され、acは96に等しく設定される。
・それ以外の場合、(y<<2)が(CtbSizeY-4)に等しく、(yCtb+CtbSizeY)がpic_height_in_luma_samples-1より小さい場合、minYは0に等しく設定され、maxYは5に等しく設定され、acは96に等しく設定される。]]
・変数minYおよびmaxYは次のように導出される:
・clipTopPosが-128に等しくなく、clipBottomPosが-128に等しい場合は、次が適用される:
■(y<<2)がclipTopPosに等しい場合、minYは0に等しく、maxYは5に等しく設定される。
・それ以外の場合、clipTopPosが-128に等しく、clipBottomPosが-128に等しくない場合は、次が適用される:
■(y<<2)が(clipBottomPos-4)に等しい場合、minYは-2に等しく設定され、maxYは3に等しく設定される。
・それ以外の場合、clipTopPosが-128に等しくなく、clipBottomPosが-128に等しくない場合は、次が適用される:
■minYは0に等しく設定され、maxYは3に等しく設定される。
・それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され[[acは64に等しく設定され]]る。
・変数minX、maxXおよびacは、次のように導出される:
・clipLeftPosが-128に等しくない場合は、次が適用される:
■(x<<2)がclipLeftPosに等しい場合、minXは0に等しく設定され、maxXは5に等しく設定される。
・それ以外の場合、clipRightPosが-128と等しくない場合、次が適用される:
■(x<<2)が(clipRightPos-4)に等しい場合、minXは-2に等しく設定され、maxXは3に等しく設定される。
・それ以外の場合、minXは-2に等しく設定され、maxXは5に等しく設定される。
・変数acは次のように導出される:
varTab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4} (8-1242)
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*ac)>>(3+BitDepthY))] (8-1243)
6. 分類フィルタ・インデックス配列filtIdx[x][y]および転置インデックス配列transposeIdx[x][y]は、x=y=0..CtbSizeY-1として、次のように導出される:
transposeTable[ ]={0,1,0,2,2,3,1,3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0に等しくない場合、filtIdx[x][y]は次のように修正される:
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5 (8-1244)
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマコーディングツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1245)
ctbHeightC=CtbSizeY/SubHeightC (8-1246)
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1についてxCtbC+x-PpsVirtualBoundariesPosX[n]/SubWidthCが0以上2未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n]/SubWidthC,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1247)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、任意のn=0..pps_num_ver_virtual_boundaries-1についてPpsVirtualBoundariesPosX[n]/SubWidthC-xCtbC-xが0より大きく3より小さい場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]/SubWidthC-1,xCtbC+x+i) (8-1248)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1249)
・[[位置(hx,hy)におけるルーマ・サンプルを含むサブピクチャーについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
hx+i=Clip3(SubPicLeftBoundaryPos/SubWidthC,SubPicRightBoundaryPos/SubWidthC,h{x+i}) (8-1184)]]
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundaries-1についてyCtbC+y-PpsVirtualBoundariesPosY[n]/SubHeightCが0以上2未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n]/SubHeightC,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1250)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_boundaries-1についてPpsVirtualBoundariesPosY[n]/SubHeightC-yCtbC-yが0より大きく3より小さい場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]/SubHeightC-1,yCtbC+y+j) (8-1251)
・それ以外の場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1252)
・[[位置(hx,hy)におけるルーマ・サンプルを含むサブピクチャーについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい場合、次が適用される:
vy+j=Clip3(SubPicTopBoundaryPos/SubWidthC,SubPicBotBoundaryPos/SubWidthC,vy+j) (8-1184)
・変数applyVirtualBoundaryは次のように導出される:
・以下の条件のうち一つまたは複数が真の場合、applyVirtualBoundaryは0に等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界である。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい。
・現在のコーディングツリー・ブロックの下部境界がサブピクチャーの下部境界であり、位置(hx,vy)におけるルーマ・サンプルを含むサブピクチャーのについてのloop_filter_across_sub_pic_enabled_flag[SubPicIdx]が0に等しい。
・現在のコーディングツリー・ブロックの下部境界は、ピクチャーの下部の仮想境界の1つであり、pps_loop_filter_across_virtual_boundries_disabled_flagが1に等しい。
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。]]
・変数clipLeftPosは、clipLeftPos/SubWidthCに等しく設定される。
・変数clipRightPosは、clipRightPos/SubWidthCに等しく設定される。
・変数clipTopPosは、clipTopPos/SubWidthCに等しく設定される。
・変数clipBottomPosは、clipBottomPos/SubWidthCに等しく設定される。
・再構成されたサンプル・オフセットr1およびr2は、[[水平ルーマ]]垂直クロマ・サンプル位置y、clipTopPosおよびclipBottomPos[[およびapplyVirtualBoundary]]に従ってテーブル8-27において指定される。
・サンプル位置オフセットc1およびc2は、水平クロマ・サンプル位置x、cxlipLeftPosおよびclipRightPosに従ってテーブル8-28において指定される。
・変数currは次のように導出される:
curr=recPicture[hx,vy] (8-1253)
・クロマ・フィルタ係数の配列f[j]とクロマ・クリッピング値の配列c[j]は、j=0..5として、次のように導出される:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][j] (8-1254)
c[j]=AlfClipC[slice_alf_aps_id_chroma][j] (8-1255)
・pcm_loop_filter_disabled_flagおよびpcm_flag[(xCtbC+x)*SubWidthC][(yCtbC+y)*SubHeightC]が両方とも1に等しい場合、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=recPictureL[hx,vy] (8-1258)
・それ以外の場合(pcm_loop_filter_disabled_flagが0に等しい、またはpcm_flag[x][y]が0に等しい)、次が適用される:
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum) (8-1259)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
・現在のルーマコーディングツリー・ブロックの左上のサンプルに対して現在のサンプルを指定するルーマ位置(x,y)。
このプロセスの出力は以下の通り:
・左垂直境界位置clipLeftPos
・右垂直境界位置clipRightPos
・上水平境界位置clipTopPos
・下水平境界位置clipBottomPos
変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPosは-128に設定される。
変数clipTopPosは次のように修正される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、y-(CtbSizeY-4)が0以上である場合、変数clipTopPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、yCtb+y-PpsVirtualBoundariesPosY[n]が任意のn=0..pps_num_hor_virtual_boundaries-1について0以上3未満である場合、次が適用される:
clipTopPos=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、yが3未満であり、現在のコーディングツリー・ブロックの上部境界がピクチャーの上部境界ではなく、次の条件のいずれかが真である場合、変数clipTopPosはyCtbに等しく設定される:
・現在のコーディングツリー・ブロックの上部境界がブリックの上部境界である場合、loop_filter_across_bricks_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの上部境界がスライスの上部境界である場合、loop_filter_across_slices_enabled_flagは0に等しい。
・現在のコーディングツリー・ブロックの上部境界が、サブピクチャーの上部境界に等しい場合、loop_filter_across_sub_pic_enabled_flagは0に等しい。
変数clipBottomPosは次のように修正される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、CtbSizeY-4-yが0より大きく4より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosY[n]-yCtb-yが任意のn=0..pps_num_hor_virtual_boundaries-1について0より大きく4より小さい場合、次が適用される:
clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1201)
・それ以外の場合、CtbSizeY-yが4未満であり、現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、次の条件のうちの1つが真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しく設定される。
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がサブピクチャーの下部境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。
変数clipLeftPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYは0に等しく、xCtb+x-PpsVirtualBoundariesPosX[n]は任意のn=0..pps_num_ver_virtual_boundaries-1について0以上3未満である場合、次が適用される:
clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1201)
・それ以外の場合、xが3未満であり、現在のコーディングツリー・ブロックの左境界がピクチャーの左境界ではなく、次の条件のうち一つまたは複数が真である場合、変数clipLeftPosはxCtbに等しく設定される。
・現在のコーディングツリー・ブロックの左境界がブリックの左境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの左境界がスライスの左境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの左境界がサブピクチャーの左境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。
変数clipRightPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYは0に等しく、PpsVirtualBoundariesPosX[n]-xCtb-xは任意のn=0..pps_num_ver_virtual_boundaries-1について0より大きく4より小さい場合、次が適用される:
clipRightPos=PpsVirtualBoundariesPosX[n] (8-1201)
・それ以外の場合、CtbSizeY-xが4未満であり、現在のコーディングツリー・ブロックの右境界がピクチャーの右境界ではなく、次の条件のうちの一つまたは複数が真である場合、変数clipRightPosはxCtb+CtbSizeYに等しく設定される。
・現在のコーディングツリー・ブロックの右境界がブリックの右境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの右境界がスライスの右境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの右境界がサブピクチャーの右境界であり、loop_filter_across_sub_pic_enabled_flagが0に等しい場合。〕
8.8.5.2 ルーマ・サンプルについてのコーディングツリー・ブロック・フィルタリング・プロセス
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureL、
・フィルタ処理され再構成されたルーマ・ピクチャー・サンプル・アレイalfPictureL、
・現在ピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
……
・i,j=-3..3として、ルーマ・サンプルの所与の配列recPicture内の対応するルーマ・サンプル(x,y)のそれぞれについての位置(hx+i,vy+j)は次のように導出される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1について、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上3未満である場合:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1229)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1について、PpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく4未満である場合:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1230)
・それ以外の場合は、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1231)
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、かつPpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、かつ任意のn=0..pps_num_hor_virtual_boundaries-1について、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1232)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_bourdariesについてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1233)
・それ以外の場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1234)
・変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、clipTopRightFlag、clipBottomLeftFlag、clipBottomRightFlagは、8.8.5.5項で指定したALF境界位置導出プロセスを(xCtb,yCtb)と(x,y)を入力として呼び出すことにより導出される。
・水平サンプル位置オフセットx1、x2、x3は、水平ルーマ・サンプル位置x、clipLeftPos、およびclipRightPosに応じてテーブル8-21において指定される。
……
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプルアレイrecPictureL
このプロセスの出力は以下の通り:
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]
i,j=-2..5として、ルーマ・サンプルの所与の配列recPicture内の対応するルーマサンプル(x,y)のそれぞれの位置(hx+i,vy+j)は、次のように導出される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1239)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosX[n]-xCtbが0より大きく6未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1240)
・それ以外の場合、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1241)
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1242)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1243)
・それ以外の場合、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1244)
・変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、clipTopRightFlag、clipBottomLeftFlag、clipBottomRightFlagは、8.8.5.5項で指定したALF境界位置導出プロセスを(xCtb,yCtb)と(x,y)を入力として呼び出すことにより導出される。
・clipTopPosが-128に等しくない場合は、次が適用される:
vy+j=Clip3(clipTopPos,pic_height_in_luma_samples-1,yCtb+y+j) (8-1245)
・clipBottomPosが-128に等しくない場合は、次が適用される:
vy+j=Clip3(0,clipBottomPos-1,yCtb+y+j) (8-1246)
・clipLeftPosが-128に等しくない場合は、次が適用される:
hx+i=Clip3(clipLeftPos,pic_width_in_luma_samples-1,xCtb+x+i) (8-1247)
・clipRightPosが-128と等しくない場合は、次が適用される:
hx+i=Clip3(0,clipRightPos-1,xCtb+x+i) (8-1248)
h x+i =xCtb (8-1245)
v y+j =yCtb (8-1245)
・clipTopRightFlagが真に等しい場合、(h x+i >=xCtb+CtbLog2SizeY)&&(v y+j <yCtb)であれば、次が適用される:
h x+i =xCtb+CtbLog2SizeY-1 (8-1245)
v y+j =yCtb (8-1245)
・clipBottomLeftFlagが真に等しい場合、(h x+i <xCtb)&&(v y+j >=yCtb+CtbLog2SizeY)であれば、次が適用される:
h x+i =xCtb (8-1245)
v y+j =yCtb+CtbLog2SizeY-1 (8-1245)
・clipBottomRightFlagが真に等しい場合、(h x+i >=xCtb+CtbLog2SizeY)&&(v y+j >=yCtb+CtbLog2SizeY)であれば、次が適用される:
h x+i =xCtb+CtbLog2SizeY-1 (8-1245)
v y+j =yCtb+CtbLog2SizeY-1 (8-1245)
1. x,y=-2..CtbSizeY+1として、変数filtH[x][y]、filtV[x][y]、filtD0[x][y]、およびfiltD1[x][y]は次のように導出される:
・xとyの両方が偶数であるか、xとyの両方が偶数ではない場合、次が適用される:
……
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプル・アレイalfPicture、
・現在ピクチャーの左上のサンプルに対して現在のクロマコーディングツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
ctbWidthC=CtbSizeY/SubWidthC (8-1278)
ctbHeightC=CtbSizeY/SubHeightC (8-1279)
フィルタ処理された再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマコーディングツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1、y=0..ctbHeightC-1として、次のようにフィルタリングされる:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、xCtbC+x-PpsVirtualBoundariesPosX[n]/SubWidthCが0以上2未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n]/SubWidthC,
pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1280)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosX[n]/SubWidthC-xCtbC-xが0より大きく3未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]/SubWidthC-1,xCtbC+x+i) (8-1281)
・それ以外の場合は、次が適用される:
hx+i=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1282)
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、yCtbC+y-PpsVirtualBoundariesPosY[n]/SubHeightCが0以上2未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n]/SubHeightC,
pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1283)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]/SubHeightC-yCtbC-yが0より大きく3より小さい場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]/SubHeightC-1,yCtbC+y+j) (8-1284)
・それ以外の場合は、次が適用される:
vy+j=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1285)
・clipTopLeftFlagが真に等しい場合、(h x+i <xCtbC)&&(v y+j <yCtbC)であれば、次が適用される:
h x+i =xCtbC (8-1245)
v y+j =yCtbC (8-1245)
・clipTopRightFlagが真に等しい場合、(h x+i >=xCtbC+CtbLog2SizeY/SubWidthC)&&(v y+j <yCtbC)であれば、次が適用される:
h x+i =xCtbC+CtbLog2SizeY/SubWidthC-1 (8-1245)
v y+j =yCtbC (8-1245)
・clipBottomLeftFlagが真に等しい場合、(h x+i <xCtbC)&&(v y+j >=yCtbC+CtbLog2SizeY/SubHeightC)であれば、次が適用される:
h x+i =xCtbC (8-1245)
v y+j =yCtbC+CtbLog2SizeY/SubHeightC-1 (8-1245)
・clipBottomRightFlagが真に等しい場合、(h x+i >=xCtbC+CtbLog2SizeY/SubWidthC)&&(v y+j >=yCtbC+CtbLog2SizeY/SubHeightCであれば、次が適用される:
h x+i =xCtbC+CtbLog2SizeY/SubWidthC-1 (8-1245)
v y+j =yCtbC+CtbLog2SizeY/SubHeightC-1 (8-1245)
・変数clipLeftPosはclipLeftPos/SubWidthCに等しく設定される。
・変数clipRightPosは、clipRightPos/SubWidthCに等しく設定される。
・変数clipTopPosはclipTopPos/SubHeightCに等しく設定される。
・変数clipBottomPosはclipBottomPos/SubHeightCに等しく設定される。
……
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・現在のルーマコーディングツリー・ブロックの左上のサンプルに対して現在のサンプルを指定するルーマ位置(x,y)。
このプロセスの出力は以下の通り;
・左垂直境界位置clipLeftPos、
・右垂直境界位置clipRightPos、
・上水平境界位置clipTopPos、
・下水平境界位置clipBottomPos
・左上境界フラグclipTopLeftFlag
・右上境界フラグclipTopRightFlag
・左下境界フラグclipBottomLeftFlag
・右下境界フラグclipBottomRightFlag
変数clipTopLeftFlag、clipTopRightFlag、clipBottomLeftFlag、clipBottomRightFlagは偽(false)に等しく設定される。
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、y-(CtbSizeY-4)が0以上の場合、変数clipTopPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
clipTopPos=PpsVirtualBoundariesPosY[n] (8-1292)
・それ以外の場合、yが3未満で、現在のコーディングツリー・ブロックの上部境界がピクチャーの上部境界ではなく、次の条件のうちの一つまたは複数が真である場合、変数clipTopPosはyCtbに等しく設定される:
・現在のコーディングツリー・ブロックの上部境界がブリックの上部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合、
・現在のコーディングツリー・ブロックの上部境界がスライスの上部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合、
・現在のコーディングツリー・ブロックの上部境界がサブピクチャーの上部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、CtbSizeY-4-yが0より大きく4より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1もしくは0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4より小さい場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1293)
・それ以外の場合で、CtbSizeY-yが4未満であり、現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、次の条件のうちの一つまたは複数が真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がサブピクチャーの下部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipLeftPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上3未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1294)
・それ以外の場合で、xが3より小さく、現在のコーディングツリー・ブロックの左境界はピクチャーの左境界ではなく、次の条件のうちの一つまたは複数が真である場合、変数clipLeftPosはxCtbに等しく設定される:
・現在のコーディングツリー・ブロックの左境界がブリックの左境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの左境界がスライスの左境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの左境界がサブピクチャーの左境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipRightPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、PpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく4未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
clipRightPos=PpsVirtualBoundariesPosX[n] (8-1295)
・それ以外の場合、CtbSizeY-xが4未満であり、現在のコーディングツリー・ブロックの右境界がピクチャーの右境界ではなく、以下の条件のうちの一つまたは複数が真である場合、変数clipRightPosはxCtb+CtbSizeYに等しく設定される:
・現在のコーディングツリー・ブロックの右境界がブリックの右境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの右境界がスライスの右境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの右境界がサブピクチャーの右境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・次の条件のうちの一つまたは複数が真の場合、変数clipTopLeftFlagはtrueに等しく設定される:
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb-CtbSizeY,yCtb-CtbSizeY)をカバーするコーディングツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb-CtbSizeY,yCtb-CtbSizeY)をカバーするコーディングツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb-CtbSizeY,yCtb-CtbSizeY)をカバーするコーディングツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipTopRightFlagは次のように修正される:
・次の条件のうちの一つまたは複数が真の場合、変数clipTopRightFlagはtrueに等しく設定される:
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+CtbSizeY,yCtb-CtbSizeY)をカバーするコーディングツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+CtbSizeY,yCtb-CtbSizeY)をカバーするコーディングツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+CtbSizeY,yCtb-CtbSizeY)をカバーするコーディングツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipBottomLeftFlagは次のように修正される:
・次の条件のうちの一つまたは複数が真の場合、変数clipBottomLeftFlagは真に等しく設定される:
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb-CtbSizeY,yCtb+CtbSizeY)をカバーするコーディングツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb-CtbSizeY,yCtb+CtbSizeY)をカバーするコーディングツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb-CtbSizeY,yCtb+CtbSizeY)をカバーするコーディングツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipBottomRightFlagは次のように修正される:
・次の条件のうちの一つまたは複数が真の場合、変数clipBottomRightFlagは真に等しく設定される:
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+CtbSizeY,yCtb+CtbSizeY)をカバーするコーディングツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+CtbSizeY,yCtb+CtbSizeY)をカバーするコーディングツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+CtbSizeY,yCtb+CtbSizeY)をカバーするコーディングツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
本実施形態では、以下の諸方法が以下のように実装される。
・パディング・プロセスが、現在のALF処理単位内のサンプルのみを使用する
・ALF仮想境界を除くすべての境界について、繰り返しパディングを適用する(ミラー・パディングを適用する)
・ピクチャー高さがCTUサイズの整数倍である場合、ALF VBを最後のCTU行に適用する。
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマ・ピクチャー・サンプルアレイrecPictureL、
・フィルタ処理された再構成されたルーマピクチャーサンプルアレイalfPictureL、
・現在のピクチャーの左上のサンプルに対して現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)。
このプロセスの出力は、修正されたフィルタリングされた再構成されたルーマピクチャーサンプルアレイalfPictureLである。
8.8.5.3節のフィルタ・インデックスの導出プロセスは、x,y=0..CtbSizeY-1として、位置(xCtb,yCtb)と再構成されたルーマ・ピクチャー・サンプル・アレイrecPictureLを入力とし、filtIdx[x][y]およびtransposeIdx[x][y]を出力として呼び出される。
フィルタリングされた再構成されたルーマ・サンプルalfPictureL[x][y]の導出のために、現在のルーマコーディングツリー・ブロックrecPictureL[x][y]内の各再構成されたルーマ・サンプルは、x,y=0..CtbSizeY-1として、次のようにフィルタリングされる。
・j=0..11として、filtIdx[x][y]で指定されたフィルタに対応するルーマ・フィルタ係数の配列f[j]と、ルーマ・クリッピング値の配列c[j]は、次のように導出される:
・AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]が16未満である場合、次が適用される:
i=AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY] (8-1219)
f[j]=AlfFixFiltCoeff[AlfClassToFiltMap[i][filtIdx[x][y]]][j] (8-1220)
c[j]=2BitdepthY (8-1221)
・それ以外の場合(AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]が16以上)、次が適用される:
i=slice_alf_aps_id_luma[AlfCtbFiltSetIdxY[xCtb>>CtbLog2SizeY][yCtb>>CtbLog2SizeY]-16] (8-1222)
f[j]=AlfCoeffL[i][filtIdx[x][y]][j] (8-1223)
c[j]=AlfClipL[i][filtIdx[x][y]][j] (8-1224)
・ルーマ・フィルタ係数およびクリッピング値インデックスidxは、transposeIdx[x][y]に依存して、次のように導出される:
・transposeIndex[x][y]が1に等しい場合、次が適用される:
idx[]={9,4,10,8,1,5,11,7,3,0,2,6} (8-1225)
・それ以外の場合で、transposeIndex[x][y]が2に等しい場合、次が適用される:
idx[]={0,3,2,1,8,7,6,5,4,9,10,11} (8-1226)
・それ以外の場合で、transposeIndex[x][y]が3に等しい場合、次が適用される:
idx[]={9,8,10,4,3,7,11,5,1,0,2,6} (8-1227)
・それ以外の場合は、次が適用される:
idx[]={0,1,2,3,4,5,6,7,8,9,10,11} (8-1228)
・i,j=-3..3のルーマ・サンプルの所与の配列recPicture内の対応するルーマサンプル(x,y)のそれぞれの位置(hx+i,vy+j)は以下のように導かれる:
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1について、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上3未満である場合、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1229)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_ver_virtual_boundaries-1について、PpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく4未満である場合、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1230)
・それ以外の場合は、次が適用される:]]
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1231)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、かつPpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、かつ任意のn=0..pps_num_hor_virtual_boundaries-1について、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1232)
・それ以外の場合、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、任意のn=0..pps_num_hor_virtual_bourdaries-1についてPpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4未満である場合、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1233)
・それ以外の場合、次が適用される:]]
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1234)
・変数h x+i およびv y+j は、(xCtb,yCtb)、(h x+i ,v y+j )、0,clipLeftPos,clipRightPos,clipTopPos,clipBottomPos,clipTopLeftFlag、clipBotRightFlagを入力として、8.8.5.6節に指定されているALFサンプル・パディング・プロセスを呼び出すことによって修正される。
・[[垂直サンプル位置のオフセットy1、y2、y3は、垂直ルーマ・サンプル位置y、clipLeftPos、およびclipRightPosに従ってテーブル8-20において指定される。
・水平サンプル位置オフセットx1、x2、x3は、水平ルーマ・サンプル位置x、clipLeftPos、clipRightPosに従ってテーブル8-21において指定される。]]
・変数currは次のように導出される:
curr=recPicture L [h x ,v y ] (8-1235)
・変数applyVirtualBoundaryは、次のように導出される:
・現在のコーディングツリー・ブロックの下部境界が現在のピクチャーの下部境界であり、pic_height_in_luma_samples-yCtb<=CtbSizeY-4である場合、applyVirtualBoundaryは0に等しく設定される:
・それ以外の場合、applyVirtualBoundaryは1に等しく設定される。
・再構成されたサンプル・オフセットy1、y2、y3は、ルーマ・サンプル位置yとapplyVirtualBoundaryに従ってテーブル8-22において指定される。
alfPictureL[xCtb+x][yCtb+y]=Clip3(0,(1<<BitDepthY)-1,sum) (8-1238)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・適応ループ・フィルタリング・プロセスの前の再構成されたルーマピクチャー・サンプルアレイrecPictureL。
このプロセスの出力は以下の通り:
・x,y=0..CtbSizeY-1として、分類フィルタ・インデックス配列filtIdx[x][y]
・x,y=0..CtbSizeY-1として、転置インデックス配列transposeIdx[x][y]
・変数x4とy4は、x<<2とy<<2として設定される。
・変数applyVirtualBoundary,minY,maxY,ac[x][y]は次のように導出される:
・y4が(CtbSizeY-8)に等しく、次の条件のうちのいずれかが真の場合、minYは-2に等しく設定され、maxYは3に等しく設定され、applyVirtualBoundaryは1に等しく設定され、ac[x][y]は96に等しく設定される。
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界であり、pic_height_in_luma_samples-yCtb>CtbSizeY-4である場合
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界でない場合
・それ以外の場合で、y4が(CtbSizeY-4)に等しく、次の条件のいずれかが真の場合、minYは0に等しく設定され、maxYは5に等しく設定され、applyVirtualBoundaryは1に等しく設定され、ac[x][y]は96に等しく設定される。
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界であり、pic_height_in_luma_samples-yCtb>CtbSizeY-4である場合
現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界でない場合
・それ以外の場合、minYは-2に等しく設定され、maxYは5に等しく設定され、applyVirtualBoundaryは0に等しく設定され、ac[x][y]は64に等しく設定される。
・変数blkXは(x4<<2)に等しく設定され、blkYは(y4<<2)に等しく設定される。
・i,j=-3.3,x=blkX..blkX+3,y=blkY..blkY+3として、位置(h x+i ,v y+j )は次のように導出される:
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、xCtb+x-PpsVirtualBoundariesPosX[n]が0以上2未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n],pic_width_in_luma_samples-1,xCtb+x+i) (8-1239)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosX[n]-xCtbが0より大きく6未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]-1,xCtb+x+i) (8-1240)
・それ以外の場合、次が適用される:]]
hx+i=Clip3(0,pic_width_in_luma_samples-1,xCtb+x+i) (8-1241)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、yCtb+y-PpsVirtualBoundariesPosY[n]が0以上2未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n],pic_height_in_luma_samples-1,yCtb+y+j) (8-1242)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく6未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]-1,yCtb+y+j) (8-1243)
・それ以外の場合、次が適用される:]]
vy+j=Clip3(0,pic_height_in_luma_samples-1,yCtb+y+j) (8-1244)
・変数h x+i およびv y+j は、(xCtb,yCtb),(h x+i ,v y+j ),0,clipLeftPos,clipRightPos,clipTopPos,clipBottomPos,clipTopLeftFlagandclipBotRightFlagを入力として、8.5.5.6項に指定されるALFサンプル・パディング・プロセスを呼び出すことによって修正される。
・[[変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPosは、8.8.5.5項で指定したALF境界位置導出プロセスを(xCtb,yCtb)と(x,y)を入力として呼び出すことにより導出される。
・clipTopPosが-128に等しくない場合は、次が適用される:
vy+j=Clip3(clipTopPos,pic_height_in_luma_samples-1,yCtb+y+j) (8-1245)
・clipBottomPosが-128に等しくない場合は、次が適用される:
vy+j=Clip3(0,clipBottomPos-1,yCtb+y+j) (8-1246)
・clipLeftPosが-128に等しくない場合は、次が適用される:
hx+i=Clip3(clipLeftPos,pic_width_in_luma_samples-1,xCtb+x+i) (8-1247)
・clipRightPosが-128と等しくない場合は、次が適用される:
hx+i=Clip3(0,clipRightPos-1,xCtb+x+i) (8-1248)
分類フィルタ・インデックス・アレイfiltIdxおよび転置インデックス・アレイtransposeIdxは、以下の順序付けられたステップによって導出される:]]
・[[x]]iと[[y]]jの両方が偶数であるか、[[x]]iと[[y]]jの両方が偶数ではない場合、次が適用される:
[[ filtH[x][y]=Abs((recPicture[hx,vy]<<1)-recPicture[hx-1,vy]-recPicture[hx+1,vy]) (8-1249)
filtV[x][y]=Abs((recPicture[hx,vy]<<1)-recPicture[hx,vy-1]-recPicture[hx,vy+1]) (8-1250)
filtD0[x][y]=Abs((recPicture[hx,vy]<<1)-recPicture[hx-1,vy-1]-recPicture[hx+1,vy+1]) (8-1251)
filtD1[x][y]=Abs((recPicture[hx,vy]<<1)-recPicture[hx+1,vy-1]-recPicture[hx-1,vy+1])]] (8-1252)]]
filtH[x+i][y+j]=Abs((recPicture[h x+i ,v y+j ]<<1)-recPicture[h x+i-1 ,v y+j ]-recPicture[h x+i+1 ,v y+j ]) (8-1249)
filtV[x+i][y+j]=Abs((recPicture[h x+i ,v y+j ]<<1)-recPicture[h x+i ,v y+j-1 ]-recPicture[h x+i ,v y+j+1 ]) (8-1250)
filtD0[x+i][y+j]=Abs((recPicture[h x+i ,v y+j ]<<1)-recPicture[h x+i-1 ,v y+j-1 ]-recPicture[h x+i+1 ,v y+j+1 ]) (8-1251)
filtD1[x+i][y+j]=Abs((recPicture[h x+i ,v y+j ]<<1)-recPicture[h x+i+1 ,v y+j-1 ]-recPicture[h x+i-1 ,v y+j+1 ]) (8-1252)
・それ以外の場合、filtH[x+i][y+j]、filtV[x+i][y+j]、filtD0[x+i][y+j]、filtD1[x+i][y+j]は0に設定される。
・変数minY、maxYおよびacは次のように導出される:
・clipTopPosが-128に等しくなく、clipBottomPosが-128に等しく、(y<<2)がclipTopPosに等しい場合、minYは0に等しく設定され、maxYは5に等しく設定される。
・それ以外の場合で、clipTopPosが-128に等しく、clipBottomPosが-128に等しくなく、(y<<2)が(clipBottomPos-4)に等しい場合、minYは-2に等しく、maxYは3に等しく設定される。
・それ以外の場合で、clipTopPosが-128に等しくなく、clipBottomPosが-128に等しくない場合、minYは0に等しく設定され、maxYは3に等しく設定される。
・それ以外の場合は、minYは-2に等しく設定され、maxYは5に等しく設定される。
・変数minX、maxXおよびacは、次のように導出される:
・clipLeftPosが-128に等しくなく、(x<<2)がclipLeftPosに等しい場合、minXは0に等しく設定され、maxXは5に等しく設定される。
・それ以外の場合、clipRightPosが-128に等しくなく、(x<<2)が(clipRightPos-4)に等しい場合、minXは-2に等しく設定され、maxXは3に等しく設定される。
・それ以外の場合、minXは-2に等しく設定され、maxXは5に等しく設定される。
・変数ac[x][y]は、minX、maxX、minY、maxYに従ってテーブル8-22において指定される。
・変数sumH[x][y]、sumV[x][y]、sumD0[x][y]、sumD1[x][y]、sumOfHV[x][y]は次のように導出される:
変数sumH[x4][y4]、sumV[x4][y4]、sumD0[x4][y4]、sumD1[x4][y4]、sumOfHV[x4][y4]は次のように導出される:
sumH[x4][y4]=Σ i Σ j filtH[blkX+i][blkY+j] (8-1253)
ここで、i=-2..5, j=minY..maxY
sumV[x4][y4]=Σ i Σ j filtV[blkX+i][blkY+j] (8-1254)
ここで、i=-2..5, j=minY..maxY
sumD0[x4][y4]=Σ i Σ j filtD0[blkX+i][blkY+j] (8-1255)
ここで、i=-2..5, j=minY..maxY
sumD1[x4][y4]=Σ i Σ j filtD1[blkX+i][blkY+j] (8-1256)
ここで、i=-2..5, j=minY..maxY
sumOfHV[x4][y4]=sumH[x4][y4]+sumV[x4][y4] (8-1257)
3. x,y=0..CtbSizeY-1として、変数dir1[x][y]、変数dir2[x][y]および変数dirS[x][y]は次のように導出される。
・変数hv1、hv0、dirHVは次のように導出される:
・sumV[x>>2][y>>2]がsumH[x>>2][y>>2]より大きい場合、次が適用される:
hv1=sumV[x>>2][y>>2] (8-1258)
hv0=sumH[x>>2][y>>2] (8-1259)
dirHV=1 (8-1260)
・それ以外の場合は、次が適用される:
hv1=sumH[x>>2][y>>2] (8-1261)
hv0=sumV[x>>2][y>>2] (8-1262)
dirHV=3 (8-1263)
・変数d1、d0、dirDは次のように導出される:
・sumD0[x>>2][y>>2]がsumD1[x>>2][y>>2]より大きい場合、以下が適用される:
d1=sumD0[x>>2][y>>2] (8-1264)
d0=sumD1[x>>2][y>>2] (8-1265)
dirD=0 (8-1266)
・それ以外の場合、次が適用される:
d1=sumD1[x>>2][y>>2] (8-1267)
d0=sumD0[x>>2][y>>2] (8-1268)
dirD=2 (8-1269)
・変数hvd1、hvd0は次のように導出される:
hvd1=(d1*hv0>hv1*d0)?d1:hv1 (8-1270)
hvd0=(d1*hv0>hv1*d0)?d0:hv0 (8-1271)
・変数dirS[x][y]、dir1[x][y]およびdir2[x][y]は、次のように導出される:
dir1[x][y]=(d1*hv0>hv1*d0)?dirD:dirHV (8-1272)
dir2[x][y]=(d1*hv0>hv1*d0)?dirHV:dirD (8-1273)
dirS[x][y]=(hvd1>2*hvd0)?1:((hvd1*2>9*hvd0)?2:0) (8-1274)
varTab[]={0,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4} (8-1275)
avgVar[x][y]=varTab[Clip3(0,15,(sumOfHV[x>>2][y>>2]*ac[x>>2][y>>2])>>(3+BitDepthY))] (8-1276)
transposeTable[]={0,1,0,2,2,3,1,3}
transposeIdx[x][y]=transposeTable[dir1[x][y]*2+(dir2[x][y]>>1)]
filtIdx[x][y]=avgVar[x][y]
dirS[x][y]が0と等しくない場合、filtIdx[x][y]は次のように修正される:
filtIdx[x][y]+=(((dir1[x][y]&0x1)<<1)+dirS[x][y])*5 (8-1277)
このプロセスの入力は以下の通り:
・適応ループ・フィルタリング・プロセスの前の再構成されたクロマ・ピクチャー・サンプル・アレイrecPicture、
・フィルタリングされた再構成されたクロマ・ピクチャー・サンプルアレイalfPicture、
・現在のピクチャーの左上のサンプルに対する現在のクロマコーディングツリー・ブロックの左上のサンプルを指定するクロマ位置(xCtbC,yCtbC)。
・代替クロマ・フィルタ・インデックスaltIdx。
このプロセスの出力は、修正されたフィルタリングされた再構成されたクロマ・ピクチャー・サンプルアレイalfPictureである。
現在のクロマコーディングツリー・ブロックctbWidthCとctbHeightCの幅と高さは、次のように導出される:
ctbWidthC=CtbSizeY/SubWidthC (8-1278)
ctbHeightC=CtbSizeY/SubHeightC (8-1279)
フィルタ処理された再構成されたクロマ・サンプルalfPicture[x][y]の導出のために、現在のクロマコーディングツリー・ブロック内の各再構成されたクロマ・サンプルrecPicture[x][y]は、x=0..ctbWidthC-1,y=0..ctbHeightC-1として、フィルタ処理される:
・i,j=-2..2として、クロマ・サンプルの所与の配列recPicture内の対応する各クロマ・サンプル(x,y)についての位置(hx+i,vy+j)は、次のように導出される:
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、xCtbC+x-PpsVirtualBoundariesPosX[n]/SubWidthCが0以上2未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(PpsVirtualBoundariesPosX[n]/SubWidthC,
pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1280)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosX[n]/SubWidthC-xCtbC-xが0より大きく3未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
hx+i=Clip3(0,PpsVirtualBoundariesPosX[n]/SubWidthC-1,xCtbC+x+i) (8-1281)
・それ以外の場合は、次が適用される:]]
hx+i=Clip3(0,pic_width_in_luma_samples/SubWidthC-1,xCtbC+x+i) (8-1282)
・[[pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、yCtbC+y-PpsVirtualBoundariesPosY[n]/SubHeightCが0以上2未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(PpsVirtualBoundariesPosY[n]/SubHeightC,
pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1283)
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しくなく、PpsVirtualBoundariesPosY[n]/SubHeightC-yCtbC-yが0より大きく3より小さい場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
vy+j=Clip3(0,PpsVirtualBoundariesPosY[n]/SubHeightC-1,yCtbC+y+j) (8-1284)
・それ以外の場合は、次が適用される:]]
vy+j=Clip3(0,pic_height_in_luma_samples/SubHeightC-1,yCtbC+y+j) (8-1285)
・変数clipLeftPos、clipRightPos、clipTopPos、clipBottomPos、clipTopLeftFlag、clipBotRightFlagは、(xCtbC*SubWidthC,yCtbC*SubHeightC)と(x*SubWidthC,y*SubHeightC)を入力として、8.8.5.5節に規定されたALF境界位置導出プロセスを呼び出すことによって導出される。
・変数h x+i およびv y+j は、(xCtb,yCtb)、(h x+i ,v y+j )、1,clipLeftPos,clipRightPos,clipTopPos,clipBottomPos,clipTopLeftFlag、clipBotRightFlagを入力として、0項に指定されているALFサンプル・パディング・プロセスを呼び出すことによって修正される。
・[[変数clipLeftPosはclipLeftPos/SubWidthCに等しく設定される。
・変数clipRightPosは、clipRightPos/SubWidthCに等しく設定される。
・変数clipTopPosはclipTopPos/SubHeightCに等しく設定される。
・変数clipBottomPosはclipBottomPos/SubHeightCに等しく設定される。
・垂直サンプル位置オフセットy1およびy2は、垂直クロマ・サンプル位置y、clipTopPosおよびclipBottomPosに従ってテーブル8-20において指定される。
・水平サンプル位置オフセットx1およびx2は、水平クロマ・サンプル位置x、clipLeftPosおよびclipRightPosに従ってテーブル8-24において指定される。]]
・変数applyVirtualBoundaryは、次のように導出される:
・現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界であり、pic_height_in_luma_samples-(yCtbC*SubHeightC)<CtbSizeY-4の場合、applyVirtualBoundaryは0に設定される:
・それ以外の場合、applyVirtualBoundaryは1に設定される。
・再構成されたサンプル・オフセットy1およびy2は、垂直ルーマ・サンプル位置yおよびapplyVirtualBoundaryに従って指定される。
・変数currは次のように導出される:
curr=recPicture[hx,vy] (8-1286)
・クロマ・フィルタ係数の配列f[j]とクロマ・クリッピング値の配列c[j]は、j=0..5として、次のように導出される:
f[j]=AlfCoeffC[slice_alf_aps_id_chroma][altIdx][j] (8-1287)
c[j]=AlfClipC[slice_alf_aps_id_chroma][altIdx][j] (8-1288)
alfPicture[xCtbC+x][yCtbC+y]=Clip3(0,(1<<BitDepthC)-1,sum) (8-1291)
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・現在のルーマコーディングツリー・ブロックの左上のサンプルに対する現在のサンプルを指定するルーマ位置(x,y)。
このプロセスの出力は以下の通り:
・左垂直境界位置clipLeftPos、
・右垂直境界位置clipRightPos、
・上水平境界位置clipTopPos、
・下水平境界位置clipBottomPos
・左上境界フラグclipTopLeftFlag、
・右下境界フラグclipBotRightFlag
変数clipTopLeftFlagとclipBotRightFlagは0に等しく設定される。
変数clipTopPosは次のように修正される:
・[[現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、]]y-(CtbSizeY-4)が0以上の場合、変数clipTopPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、[[PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、]]yCtb+y-PpsVirtualBoundariesPosY[n]が0以上3未満である場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
clipTopPos=PpsVirtualBoundariesPosY[n] (8-1292)
・それ以外の場合、yが3未満で、[[現在のコーディングツリー・ブロックの上部境界がピクチャーの上部境界ではなく、]]次の条件のうちの一つまたは複数が真である場合、変数clipTopPosはyCtbに等しく設定される:
・現在のコーディングツリー・ブロックの上部境界がブリックの上部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合、
・現在のコーディングツリー・ブロックの上部境界がスライスの上部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合、
・現在のコーディングツリー・ブロックの上部境界がサブピクチャーの上部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・[[現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、]]CtbSizeY-4-yが0より大きく4より小さい場合、変数clipBottomPosはyCtb+CtbSizeY-4に等しく設定される。
・それ以外の場合で、pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、[[PpsVirtualBoundariesPosY[n]%CtbSizeYが0に等しく、]]PpsVirtualBoundariesPosY[n]がpic_height_in_luma_samples-1もしくは0に等しくなく、PpsVirtualBoundariesPosY[n]-yCtb-yが0より大きく4より小さい場合、任意のn=0..pps_num_hor_virtual_boundaries-1について、次が適用される:
clipBottomPos=PpsVirtualBoundariesPosY[n] (8-1293)
・それ以外の場合で、CtbSizeY-yが4未満であり、[[現在のコーディングツリー・ブロックの下部境界がピクチャーの下部境界ではなく、]]次の条件のうちの一つまたは複数が真である場合、変数clipBottomPosはyCtb+CtbSizeYに等しく設定される:
・現在のコーディングツリー・ブロックの下部境界がブリックの下部境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がスライスの下部境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの下部境界がサブピクチャーの下部境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
変数clipLeftPosは次のように修正される:
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、[[PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、]]xCtb+x-PpsVirtualBoundariesPosX[n]が0以上3未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
clipLeftPos=PpsVirtualBoundariesPosX[n] (8-1294)
・それ以外の場合で、xが3より小さく、[[現在のコーディングツリー・ブロックの左境界はピクチャーの左境界ではなく、]]次の条件のうちの一つまたは複数が真である場合、変数clipLeftPosはxCtbに等しく設定される:
・現在のコーディングツリー・ブロックの左境界がブリックの左境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの左境界がスライスの左境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの左境界がサブピクチャーの左境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・pps_loop_filter_across_virtual_boundaries_disabled_flagが1に等しく、[[PpsVirtualBoundariesPosX[n]%CtbSizeYが0に等しく、]]PpsVirtualBoundariesPosX[n]-xCtb-xが0より大きく4未満である場合、任意のn=0..pps_num_ver_virtual_boundaries-1について、次が適用される:
clipRightPos=PpsVirtualBoundariesPosX[n] (8-1295)
・それ以外の場合、CtbSizeY-xが4未満であり、[[現在のコーディングツリー・ブロックの右境界がピクチャーの右境界ではなく、]]以下の条件のうちの一つまたは複数が真である場合、変数clipRightPosはxCtb+CtbSizeYに等しく設定される:
・現在のコーディングツリー・ブロックの右境界がブリックの右境界であり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの右境界がスライスの右境界であり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・現在のコーディングツリー・ブロックの右境界がサブピクチャーの右境界であり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
・次の条件のうち一つまたは複数が真の場合、変数clipXFlagはtrueに等しく設定される:
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+offSetXHor,yCtb+offsetXVer)をカバーするコーディングツリー・ブロックが異なるブリックにあり、loop_filter_across_bricks_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+offSetXHor,yCtb+offsetXVer)をカバーするコーディングツリー・ブロックが異なるスライスにあり、loop_filter_across_slices_enabled_flagが0に等しい場合。
・位置(xCtb,yCtb)をカバーするコーディングツリー・ブロックと位置(xCtb+offSetXHor,yCtb+offsetXVer)をカバーするコーディングツリー・ブロックが異なるサブピクチャーにあり、loop_filter_across_subpic_enabled_flag[SubPicIdx]が0に等しい場合。
このプロセスの入力は以下の通り:
・現在のピクチャーの左上のサンプルに対する現在のルーマコーディングツリー・ブロックの左上のサンプルを指定するルーマ位置(xCtb,yCtb)
・現在のピクチャーの左上のサンプルに対する近傍サンプルを指定するルーマ位置(x,y)
・その色成分がクロマ成分であるか否かを指定するフラグ
・左垂直境界位置clipLeftPos、
・右垂直境界位置clipRightPos、
・上水平境界位置clipTopPos、
・下水平境界位置clipBottomPos、
・左上境界フラグclipTopLeftFlag、
・右下境界フラグclipBotRightFlag
このプロセスの出力は以下の通り:
・現在のピクチャーの左上のサンプルに対する近傍サンプルを指定する修正されたルーマ位置(x,y)、
・変数picWidth,picHeight,xCtbCur,yCtbCur,CtbSizeHor,CtbSizeVer,topBry,botBry,leftBry,rightBryは次のように導かれる:
picWidth=isChroma ? pic_width_in_luma_samples/SubWidthC:pic_width_in_luma_samples
pic_width_in_luma_samples/SubWidthC:pic_width_in_luma_samples (8-xxxx)
picHeight=isChroma ? pic_height_in_luma_samples/SubHeightC:pic_height_in_luma_samples (8-xxxx)
xCtbCur=isChroma ? xCtb/SubWidthC:xCtb (8-xxxx)
yCtbCur=isChroma ? yCtb/SubHeightC:yCtb (8-xxxx)
CtbSizeHor=isChroma ? CtbSizeY/SubWidthC:CtbSizeY (8-xxxx)
CtbSizeVer=isChroma ? CtbSizeY/SubHeightC:CtbSizeY (8-xxxx)
topBry=isChroma ? clipTopPos/SubHeightC:clipTopPos (8-xxxx)
botBry=isChroma ? clipBottomPos/SubHeightC:clipBottomPos (8-xxxx)
leftBry=isChroma ? clipLeftPos/SubWidthC:clipLeftPos (8-xxxx)
rightBry=isChroma ? clipRightPos/SubWidthC:clipRightPos (8-xxxx)
変数(x,y)は次のように修正される:
・topBryが0以上の場合、次が適用される:
x=y<topBry ? Clip3(xCtbCur,xCtbCur+CtbSizeHor-1,x):x (8-xxxx)
y=Clip3(topBry,picHeight-1,y) (8-xxxx)
・botBryが0以上の場合、次が適用される:
x=y>=botBry ? Clip3(xCtbCur,xCtbCur+CtbSizeHor-1,x):x (8-xxxx)
y=Clip3(0,botBry-1,y) (8-xxxx)
・leftBryが0以上の場合、次が適用される:
x=Clip3(leftBry,picWidth-1,x) (8-xxxx)
・RightBryが0以上の場合、次が適用される:
x=Clip3(0,rightBry-1,x) (8-xxxx)
次の条件がすべて真である場合、(x,y)は(xCtbCur,y)に等しく設定される:
・clipTopLeftFlagがtrueに等しい
・topBryが0より小さく、leftBryが0より小さい
・xがxCtbCurより小さく、yはyCtbCurより小さい
以下の条件がすべて真である場合、(x,y)は(xCtbCur+CtbSizeHor-1,yCtbCur)に等しく設定される:
・clipBotRightFlagがtrueに等しい
・botBryが0未満であり、rightBryが0未満
・xがxCtbCur+CtbSizeHor以上であり、yがyCtbCur+CtbSizeVer以上
Claims (59)
- ビデオ処理の方法であって:
現在のブロックの外側のサンプルにアクセスする符号化ツールを使用する、ビデオの現在のブロックと該ビデオのビットストリーム表現との間の変換について、前記変換のために使用される近傍サンプルが利用可能でないことを判別するステップであって、前記ビデオのビデオ単位の境界を越えたところに位置するサンプルは、利用可能でないサンプルとみなされる、ステップと;
前記判別に基づいて、利用可能でない前記近傍サンプルの代わりにパディング・サンプルによって前記変換を実行するステップとを含み、
前記パディング・サンプルは、現在のブロックに関連する現在の処理単位内にあるように制限されたサンプルを使用して決定される、
方法。 - 前記符号化ツールは、フィルタリング・プロセスおよび分類プロセスを含む、請求項1に記載の方法。
- 前記符号化ツールは、フィルタリング・プロセスまたは分類プロセスのうちの1つを含む、請求項1に記載の方法。
- 請求項1ないし3のうちいずれか一項に記載の方法であって、前記ビデオ単位は、現在の処理単位とは異なり、前記ビデオ単位の境界は、スライス境界、タイル境界、ブリック境界、サブピクチャー境界、360ビデオ仮想境界、またはピクチャー境界を含む、方法。
- 請求項1ないし4のうちいずれか一項に記載の方法であって、現在のブロックの上の近傍サンプルのうち、少なくとも現在の処理単位内にある部分は、現在のブロックの左上方の近傍サンプルが利用可能でなく、現在のブロックの上の近傍サンプルが利用可能である場合に、現在のブロックの左上方の近傍サンプルをパディングするために使用される、方法。
- 現在のブロックの外側に位置する現在の処理単位のサンプルのサブセットが利用可能でない場合、前記サンプルのサブセットは、現在のブロックの内側に位置するサンプルを使用してパディングされる、請求項1ないし請求項5のうちいずれか一項に記載の方法。
- 請求項1ないし6のうちいずれか一項に記載の方法であって、利用可能でない現在のブロックの近傍サンプルの左列または右列が、現在の処理単位のサンプルの左列または右列を用いてパディングされる、方法。
- 請求項1ないし請求項7のうちいずれか一項に記載の方法であって、現在ブロックの上または下の近傍サンプルが、現在の処理単位の最上行または最下行のサンプルを用いてパディングされる、方法。
- 利用可能でない現在ブロックの左上方(above-left)、右上方(above-right)、左下方(below-left)または右下方(below-right)の近傍サンプルが、現在の処理単位の左上(top-left)、右上(top-right)、左下(bottom-left)、または右下(bottom-right)のサンプルを使用してパディングされる、請求項1ないし請求項8のいずれかに記載の方法。
- 現在ブロックの左上方および上の近傍サンプルが利用可能でない場合、現在の処理単位内にある現在のブロックのサンプルの最上行を用いて、前記上の近傍サンプルがパディングされ、前記パディングされた上の近傍サンプルが、現在のブロックの左上方の近傍サンプルをパディングするために使用される、請求項1ないし9のうちいずれか一項に記載の方法。
- 現在のブロックの左上、上、および左の近傍サンプルが利用可能でない場合に、前記上の近傍サンプルは、現在のブロックの、現在の処理単位内にあるサンプルの最上行を用いてパディングされ、前記パディングされた上の近傍サンプルが、現在のブロックの前記左上の近傍サンプルをパディングするために用いられ、現在の処理単位内にある現在のブロックの左列が、現在のブロックの前記左の近傍サンプルをパディングするために用いられる、請求項1ないし請求項10のいずれかに記載の方法。
- 前記符号化ツールを適用する仕方が、現在の処理単位に対する一つまたは複数の利用可能でないサンプルの位置に基づく、請求項1ないし11のうちいずれか一項に記載の方法。
- 現在の処理単位の一つまたは複数の利用可能でない近傍サンプルは、現在の処理単位内に位置するサンプルを使用してパディングされる、請求項12に記載の方法。
- 現在の処理単位の左上の利用可能でない近傍サンプルが、現在の処理単位の左上のサンプルを使用してパディングされる、請求項12に記載の方法。
- 現在処理単位の右上の利用可能でない近傍サンプルは、現在の処理単位の右上のサンプルを用いてパディングされる、請求項12に記載の方法。
- 現在処理単位の左下の利用可能でない近傍サンプルは、現在の処理単位の左下のサンプルを使用してパディングされる、請求項12に記載の方法。
- 現在の処理単位の右下の利用可能でない近傍サンプルは、現在の処理単位の右下のサンプルを使用してパディングされる、請求項12に記載の方法。
- ビデオ処理の方法であって:
現在のブロックの外側のサンプルにアクセスする符号化ツールを使用する、ビデオの現在のブロックと該ビデオのビットストリーム表現の変換について、現在のブロックの近傍サンプルが現在のブロックと同じビデオ単位内にあるかどうかを判定するステップと;
前記判定に基づいて前記変換を実行するステップとを含む、
方法。 - 前記近傍サンプルが、現在のブロックの左上、右上、左下、または右下の領域に位置する、請求項18に記載の方法。
- 現在のブロックが、符号化ツリー単位を含む、請求項18または19に記載の方法。
- 現在のブロックが、現在の適応フィルタリングループ処理単位を含む、請求項18または19に記載の方法。
- 現在のブロックが、現在の符号化ツリー単位内に配置された現在のALF処理単位の一部を含む、請求項18または19に記載の方法。
- ビデオ処理の方法であって:
現在のブロックの外側のサンプルにアクセスする符号化ツールを使用する、ビデオの現在のブロックと、該ビデオのビットストリーム表現との変換を実行するステップを含み、
該変換中に、現在のブロックの左上、右上、左下、または右下の領域における近傍サンプルの利用可能性は、現在のブロックの上、左、右、または下の近傍領域におけるサンプルから独立して決定され、前記ビデオのビデオ単位の境界を越えたところに位置するサンプルは、利用可能でないサンプルとみなされる、
方法。 - 現在のブロックは、現在の適応ループ・フィルタリング(ALF)処理単位を含む、請求項23に記載の方法。
- 現在のブロックは、現在の符号化ツリー単位内に配置される現在のALF処理単位の一部を含む、請求項23に記載の方法。
- ビデオ処理の方法であって:
現在の処理単位の外側のサンプルにアクセスする符号化ツールを使用して、ビデオの現在の処理単位と該ビデオのビットストリーム表現との変換を実行するステップを含み、
前記変換の間、現在の処理単位の利用可能でない近傍サンプルは、所定の順序でパディングされ、前記ビデオのビデオ単位の境界を越えたところに位置するサンプルは、利用可能でないサンプルとみなされる、
方法。 - 現在の処理単位が、符号化ツリー単位を含む、請求項26に記載の方法。
- 現在の処理単位が、現在の適応ループ・フィルタリング(ALF)処理単位を含む、請求項26に記載の方法。
- 現在の処理単位が、現在の符号化ツリー単位内に位置する現在のALF処理単位の一部を含む、請求項26に記載の方法。
- 前記ビデオ単位は、ブリック、タイル、スライス、サブピクチャー、または360仮想領域を含む、請求項26ないし29のうちいずれかに記載の方法。
- 前記順序は、現在の処理単位の上方の領域に位置する利用可能でない近傍サンプルが、現在の処理単位の最上行を使用して最初にパディングされることを指定する、請求項26ないし30のうちいずれか一項に記載の方法。
- 現在の処理単位の左上の領域に位置する利用可能でない近傍サンプルが、現在の処理単位の左上のサンプルを使用してパディングされる、請求項31に記載の方法。
- 現在の処理単位の右上の領域に位置する、利用可能でない近傍サンプルが、現在の処理単位の右上のサンプルを用いてパディングされる、請求項31に記載の方法。
- 前記順序は、現在の処理単位の下方の領域に位置する利用可能でない近傍サンプルが、現在の処理単位の最下行を使用して最初にパディングされることを指定する、請求項26ないし29のいずれか一項に記載の方法。
- 現在の処理単位の左下方の領域に位置する利用可能でない近傍サンプルが、現在の処理単位の左下のサンプルを用いてパディングされる、請求項34に記載の方法。
- 現在の処理単位の右下方の領域に位置する利用可能でない近傍サンプルが、現在の処理単位の右下のサンプルを用いてパディングされる、請求項34に記載の方法。
- 利用可能でない現在の処理単位の左近傍サンプルが、現在の処理単位の左列を使用してパディングされる、請求項26ないし36のうちいずれか一項に記載の方法。
- 現在の処理単位の利用可能でない右近傍サンプルが、現在の処理単位の右列を使用してパディングされる、請求項26ないし36のうちいずれか一項に記載の方法。
- 現在の処理単位の左の近傍サンプルおよび上の近傍サンプルが利用可能であり、現在の処理単位の左上の領域の近傍サンプルが利用可能でない場合、前記左上の領域の近傍サンプルは、現在の処理単位の左上のサンプルを使用してパディングされる、請求項26ないし38のうちいずれか一項に記載の方法。
- 現在の処理単位の右の近傍サンプルおよび下の近傍サンプルが利用可能であり、現在の処理単位の右下の領域の近傍サンプルが利用可能でない場合には、前記右下の領域の近傍サンプルは、現在の処理単位の右下のサンプルを用いてパディングされる、請求項26ないし38のうちいずれか一項に記載の方法。
- 現在の処理単位は、符号化ツリー単位のN行を含む上部と、前記符号化ツリー単位のM行を含む下部とを含み、前記処理単位の近傍サンプルの利用可能性は、現在の処理単位の前記上部または前記下部のうちの一方に基づいており、MおよびNは正の整数である、請求項26ないし40のうちいずれか一項に記載の方法。
- M=Nである、請求項41に記載の方法。
- 前記近傍サンプルが、現在の処理単位の前記上部または前記下部とは異なるビデオ単位内にある場合、前記近傍サンプルは利用可能でない、請求項41または42に記載の方法。
- 前記境界は仮想境界ではなく、前記境界に沿ったサンプルに繰り返しパディングまたはミラー・パディングが適用される、請求項26ないし43のうちいずれか一項に記載の方法。
- 前記境界が垂直境界または水平境界を含む、請求項44に記載の方法。
- 現在の処理単位が前記ビデオ単位の境界を横切る場合に、前記適応ループ・フィルタリング符号化ツールは、前記境界を横切って無効にされる、請求項26ないし45のうちいずれか一項に記載の方法。
- 現在の処理単位は、前記境界に沿って複数の処理単位に分割される、請求項46に記載の方法。
- 現在の処理単位は、前記複数の処理単位のいずれも前記境界を横切らなくなるまで、再帰的に複数の処理単位に分割される、請求項47に記載の方法。
- 前記複数の処理単位のそれぞれが、基本的なALF処理単位とみなされる、請求項48に記載の方法。
- 前記符号化ツールが、適応ループ・フィルタリング(ALF)プロセスを含む、請求項1ないし49のうちいずれか一項に記載の方法。
- 前記AFL符号化ツールが、成分横断適応ループ・フィルタリング・プロセスを含む、請求項1ないし50のうちいずれか一項に記載の方法。
- 前記符号化ツールは、前記ビデオのピクチャーの部分領域に適用可能である、請求項1ないし51のうちいずれか一項に記載の方法。
- 前記部分領域は、前記ビデオの出力ピクチャー、適合窓、またはスケーリング窓を含む、請求項52に記載の方法。
- 前記ピクチャーの前記部分領域の外側の領域内のサンプルがフィルタリングされることが禁止される、請求項1ないし53のうちいずれか一項に記載の方法。
- 前記変換は、前記ビデオを前記ビットストリーム表現にエンコードすることを含む、請求項1ないし54のうちいずれか一項に記載の方法。
- 前記変換は、前記ビットストリーム表現に前記ビデオをデコードすることを含む、請求項1ないし54のうちいずれか一項に記載の方法。
- 請求項1ないし56のうちいずれか一項に記載の方法を実装するように構成されたプロセッサを備える、ビデオ処理装置。
- プロセッサによって実行されると該プロセッサに請求項1ないし56のうち一項に記載の方法を実行させるコードがその上に記憶されている、コンピュータ読み取り可能な媒体。
- 請求項1ないし56のうちいずれか一項に従って生成されたビットストリーム表現を記憶しているコンピュータ読み取り可能な媒体。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2019110489 | 2019-10-10 | ||
CNPCT/CN2019/110489 | 2019-10-10 | ||
CNPCT/CN2019/110681 | 2019-10-11 | ||
CN2019110681 | 2019-10-11 | ||
CN2019111114 | 2019-10-14 | ||
CNPCT/CN2019/111114 | 2019-10-14 | ||
PCT/CN2020/120063 WO2021068906A1 (en) | 2019-10-10 | 2020-10-10 | Padding process at unavailable sample locations in adaptive loop filtering |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2022550998A true JP2022550998A (ja) | 2022-12-06 |
JP7454042B2 JP7454042B2 (ja) | 2024-03-21 |
Family
ID=75437749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022521190A Active JP7454042B2 (ja) | 2019-10-10 | 2020-10-10 | 適応ループ・フィルタリングにおける利用可能でないサンプル位置でのパディング・プロセス |
Country Status (6)
Country | Link |
---|---|
US (2) | US11706462B2 (ja) |
EP (1) | EP4029263A4 (ja) |
JP (1) | JP7454042B2 (ja) |
KR (1) | KR20220071203A (ja) |
CN (2) | CN114556939A (ja) |
WO (1) | WO2021068906A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7467617B2 (ja) | 2020-04-26 | 2024-04-15 | テンセント・アメリカ・エルエルシー | 幾何学的クロスコンポーネントフィルタリング |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114424539B (zh) | 2019-06-14 | 2024-07-12 | 北京字节跳动网络技术有限公司 | 处理视频单元边界和虚拟边界 |
US20220394309A1 (en) * | 2021-05-20 | 2022-12-08 | Lemon Inc. | On Padding Methods For Neural Network-Based In-Loop Filter |
US20230179763A1 (en) * | 2021-12-06 | 2023-06-08 | Tencent America LLC | Interpolation Filters for Adaptive Motion Vector Difference Resolution |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130128986A1 (en) * | 2011-11-23 | 2013-05-23 | Mediatek Inc. | Method and Apparatus of Slice Boundary Padding for Loop Filtering |
US20130343447A1 (en) * | 2012-06-25 | 2013-12-26 | Broadcom Corporation | Adaptive loop filter (ALF) padding in accordance with video coding |
Family Cites Families (111)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7558320B2 (en) | 2003-06-13 | 2009-07-07 | Microsoft Corporation | Quality control in frame interpolation with motion analysis |
CN101207812B (zh) | 2007-12-10 | 2010-04-07 | 海信集团有限公司 | 一种视频环路滤波方法 |
CN104702965B (zh) | 2009-02-10 | 2018-01-26 | 美国莱迪思半导体公司 | 块噪声检测和滤波 |
US9094658B2 (en) | 2010-05-10 | 2015-07-28 | Mediatek Inc. | Method and apparatus of adaptive loop filtering |
CN102972028B (zh) * | 2010-05-17 | 2015-08-12 | Lg电子株式会社 | 新的帧内预测模式 |
CN105516722B (zh) | 2010-09-30 | 2018-12-07 | 三菱电机株式会社 | 运动图像编码装置及方法、运动图像解码装置及方法 |
US8861617B2 (en) | 2010-10-05 | 2014-10-14 | Mediatek Inc | Method and apparatus of region-based adaptive loop filtering |
CN106878729B (zh) | 2010-10-05 | 2019-09-24 | 寰发股份有限公司 | 基于分区基础的自适应环路滤波方法和装置 |
US9525884B2 (en) | 2010-11-02 | 2016-12-20 | Hfi Innovation Inc. | Method and apparatus of slice boundary filtering for high efficiency video coding |
EP2708027B1 (en) | 2011-05-10 | 2019-12-25 | MediaTek Inc. | Method and apparatus for reduction of in-loop filter buffer |
KR101956284B1 (ko) | 2011-06-30 | 2019-03-08 | 엘지전자 주식회사 | 보간 방법 및 이를 이용한 예측 방법 |
US9641866B2 (en) | 2011-08-18 | 2017-05-02 | Qualcomm Incorporated | Applying partition-based filters |
US9357235B2 (en) | 2011-10-13 | 2016-05-31 | Qualcomm Incorporated | Sample adaptive offset merged with adaptive loop filter in video coding |
EP2737705A4 (en) | 2011-10-24 | 2016-03-02 | Mediatek Inc | METHOD AND APPARATUS FOR NON-INTER-TILE BUCKLE FILTERING |
US9247258B2 (en) | 2011-10-26 | 2016-01-26 | Qualcomm Incorporated | Unified design for picture partitioning schemes |
US20130107973A1 (en) | 2011-10-28 | 2013-05-02 | Qualcomm Incorporated | Loop filtering control over tile boundaries |
US9077998B2 (en) | 2011-11-04 | 2015-07-07 | Qualcomm Incorporated | Padding of segments in coded slice NAL units |
US8983218B2 (en) * | 2012-04-11 | 2015-03-17 | Texas Instruments Incorporated | Virtual boundary processing simplification for adaptive loop filtering (ALF) in video coding |
KR102070622B1 (ko) | 2012-11-23 | 2020-01-29 | 삼성전자주식회사 | 동영상을 위한 양자화 테이블 추정 방법 및 장치 |
US9596461B2 (en) | 2012-11-26 | 2017-03-14 | Qualcomm Incorporated | Loop filtering across constrained intra block boundaries in video coding |
EP2941871A2 (en) | 2013-01-07 | 2015-11-11 | VID SCALE, Inc. | Enhanced deblocking filters for video coding |
US9467707B2 (en) | 2013-03-05 | 2016-10-11 | Qualcomm Incorporated | Parallel processing for video coding |
US9648335B2 (en) | 2013-07-12 | 2017-05-09 | Qualcomm Incorporated | Bitstream restrictions on picture partitions across layers |
US9628792B2 (en) | 2013-07-15 | 2017-04-18 | Qualcomm Incorporated | Cross-layer parallel processing and offset delay parameters for video coding |
KR102135997B1 (ko) | 2013-09-27 | 2020-07-20 | 퀄컴 인코포레이티드 | 심도 인트라 예측 모드들에 대한 잔차 코딩 |
WO2015070739A1 (en) | 2013-11-15 | 2015-05-21 | Mediatek Inc. | Method of block-based adaptive loop filtering |
US9807406B2 (en) | 2014-03-17 | 2017-10-31 | Qualcomm Incorporated | Picture flushing and decoded picture buffer parameter inference for multi-layer bitstreams |
US9591325B2 (en) | 2015-01-27 | 2017-03-07 | Microsoft Technology Licensing, Llc | Special case handling for merged chroma blocks in intra block copy prediction mode |
US20160227222A1 (en) | 2015-02-02 | 2016-08-04 | Mediatek Inc. | Multi-Standard Video Decoder with Novel Intra Prediction Decoding |
US10057574B2 (en) | 2015-02-11 | 2018-08-21 | Qualcomm Incorporated | Coding tree unit (CTU) level adaptive loop filter (ALF) |
US20160241881A1 (en) | 2015-02-13 | 2016-08-18 | Mediatek Inc. | Method and Apparatus of Loop Filters for Efficient Hardware Implementation |
JP6722701B2 (ja) | 2015-06-08 | 2020-07-15 | ヴィド スケール インコーポレイテッド | スクリーンコンテンツ符号化のためのイントラブロックコピーモード |
WO2017045101A1 (en) | 2015-09-14 | 2017-03-23 | Mediatek Singapore Pte. Ltd. | Advanced deblocking filter in video coding |
JP6559337B2 (ja) | 2015-09-23 | 2019-08-14 | ノキア テクノロジーズ オーユー | 360度パノラマビデオの符号化方法、符号化装置、及びコンピュータプログラム |
EP3371974B1 (en) | 2015-11-06 | 2024-05-01 | Microsoft Technology Licensing, LLC | Flexible reference picture management for video encoding |
WO2017133660A1 (en) * | 2016-02-04 | 2017-08-10 | Mediatek Inc. | Method and apparatus of non-local adaptive in-loop filters in video coding |
US11563938B2 (en) | 2016-02-15 | 2023-01-24 | Qualcomm Incorporated | Geometric transforms for filters for video coding |
US10419755B2 (en) | 2016-05-16 | 2019-09-17 | Qualcomm Incorporated | Confusion of multiple filters in adaptive loop filtering in video coding |
US10264282B2 (en) | 2016-06-27 | 2019-04-16 | Mediatek Inc. | Method and apparatus of inter coding for VR video using virtual reference frames |
CN117135357A (zh) | 2016-07-08 | 2023-11-28 | Vid拓展公司 | 使用几何图形投影的360度视频编码 |
US10841581B2 (en) | 2016-07-14 | 2020-11-17 | Arris Enterprises Llc | Region specific encoding and SAO-sensitive-slice-width-adaptation for improved-quality HEVC encoding |
US11095922B2 (en) | 2016-08-02 | 2021-08-17 | Qualcomm Incorporated | Geometry transformation-based adaptive loop filtering |
CN116684580A (zh) | 2016-08-03 | 2023-09-01 | 株式会社Kt | 用于对视频进行编码和解码的方法和装置 |
US20180054613A1 (en) | 2016-08-22 | 2018-02-22 | Mediatek Inc. | Video encoding method and apparatus with in-loop filtering process not applied to reconstructed blocks located at image content discontinuity edge and associated video decoding method and apparatus |
US10419757B2 (en) * | 2016-08-31 | 2019-09-17 | Qualcomm Incorporated | Cross-component filter |
US10848758B2 (en) | 2016-11-22 | 2020-11-24 | Electronics And Telecommunications Research Institute | Image encoding/decoding image method and device, and recording medium storing bit stream |
CN108111851B (zh) | 2016-11-25 | 2020-12-22 | 华为技术有限公司 | 一种去块滤波方法及终端 |
US10555006B2 (en) | 2016-12-22 | 2020-02-04 | Qualcomm Incorporated | Deriving bilateral filter information based on a prediction mode in video coding |
US20180184127A1 (en) | 2016-12-22 | 2018-06-28 | Qualcomm Incorporated | Determining neighboring samples for bilateral filtering in video coding |
US10506230B2 (en) | 2017-01-04 | 2019-12-10 | Qualcomm Incorporated | Modified adaptive loop filter temporal prediction for temporal scalability support |
US11277635B2 (en) | 2017-03-17 | 2022-03-15 | Vid Scale, Inc. | Predictive coding for 360-degree video based on geometry padding |
US11057627B2 (en) | 2017-03-22 | 2021-07-06 | Industry-University Cooperation Foundation Hanyang University | In-loop filtering method according to adaptive pixel classification standard |
KR20190126295A (ko) | 2017-03-30 | 2019-11-11 | 삼성전자주식회사 | 인 루프 필터를 선택적으로 적용하여 직사각형 프로젝션에 360도 이미지 컨텐츠를 제작하는 방법 및 장치 |
EP3610649A1 (en) | 2017-04-11 | 2020-02-19 | VID SCALE, Inc. | 360-degree video coding using face continuities |
US10778974B2 (en) | 2017-07-05 | 2020-09-15 | Qualcomm Incorporated | Adaptive loop filter with enhanced classification methods |
EP3454556A1 (en) | 2017-09-08 | 2019-03-13 | Thomson Licensing | Method and apparatus for video encoding and decoding using pattern-based block filtering |
US10728573B2 (en) * | 2017-09-08 | 2020-07-28 | Qualcomm Incorporated | Motion compensated boundary pixel padding |
WO2019060443A1 (en) | 2017-09-20 | 2019-03-28 | Vid Scale, Inc. | HANDLING FACIAL DISCONTINUITIES IN 360-DEGREE VIDEO CODING |
US10965941B2 (en) | 2017-10-09 | 2021-03-30 | Qualcomm Incorporated | Position-dependent prediction combinations in video coding |
CN111213378B (zh) | 2017-10-09 | 2022-05-03 | 佳能株式会社 | 用于对像素块进行去块滤波的方法和装置 |
JP2021016016A (ja) | 2017-10-20 | 2021-02-12 | シャープ株式会社 | 動画像符号化装置及び動画像復号装置 |
CN117041536A (zh) | 2017-11-01 | 2023-11-10 | Vid拓展公司 | 用于简化视频译码中的自适应环路滤波器的方法 |
US11425418B2 (en) | 2017-11-01 | 2022-08-23 | Vid Scale, Inc. | Overlapped block motion compensation |
US10728549B2 (en) | 2017-11-06 | 2020-07-28 | Dolby Laboratories Licensing Corporation | Adaptive loop filtering for high-dynamic range video |
CN107801024B (zh) | 2017-11-09 | 2019-07-12 | 北京大学深圳研究生院 | 一种用于帧内预测的边界滤波方法 |
US10721469B2 (en) | 2017-11-28 | 2020-07-21 | Qualcomm Incorporated | Line buffer reduction for adaptive loop filtering in video coding |
CN115955562A (zh) | 2017-11-29 | 2023-04-11 | 韩国电子通信研究院 | 采用环内滤波的图像编码/解码方法和装置 |
WO2019126170A1 (en) | 2017-12-19 | 2019-06-27 | Vid Scale, Inc. | Face discontinuity filtering for 360-degree video coding |
WO2019131400A1 (ja) | 2017-12-26 | 2019-07-04 | シャープ株式会社 | 画像フィルタ装置、画像復号装置、および画像符号化装置 |
WO2019131651A1 (en) | 2017-12-29 | 2019-07-04 | Sharp Kabushiki Kaisha | Systems and methods for partitioning video blocks at a boundary of a picture for video coding |
CN109996069B (zh) | 2018-01-03 | 2021-12-10 | 华为技术有限公司 | 视频图像编解码方法及设备 |
US10972729B2 (en) | 2018-01-20 | 2021-04-06 | Qualcomm Incorporated | Deblocking filter selection and application in video coding |
US20190238845A1 (en) | 2018-01-26 | 2019-08-01 | Qualcomm Incorporated | Adaptive loop filtering on deblocking filter results in video coding |
WO2019157717A1 (zh) | 2018-02-14 | 2019-08-22 | 北京大学 | 运动补偿的方法、装置和计算机系统 |
US11212438B2 (en) | 2018-02-14 | 2021-12-28 | Qualcomm Incorporated | Loop filter padding for 360-degree video coding |
US20190281273A1 (en) * | 2018-03-08 | 2019-09-12 | Mediatek Inc. | Adaptive loop filtering method for reconstructed projection-based frame that employs projection layout of 360-degree virtual reality projection |
US11470359B2 (en) | 2018-03-30 | 2022-10-11 | Sharp Kabushiki Kaisha | Systems and methods for partitioning video blocks at a boundary of a picture for video coding |
US10708592B2 (en) | 2018-04-02 | 2020-07-07 | Qualcomm Incorporated | Deblocking filter for video coding and processing |
US20190306502A1 (en) | 2018-04-02 | 2019-10-03 | Qualcomm Incorporated | System and method for improved adaptive loop filtering |
US10904576B2 (en) | 2018-04-27 | 2021-01-26 | Panasonic Intellectual Property Corporation Of America | Encoder, decoder, encoding method, and decoding method for generating a prediction image using a plurality of pixels generated outside of a boundary of a reference picture on which smoothing has been performed |
CN118694941A (zh) | 2018-05-31 | 2024-09-24 | 夏普株式会社 | 视频数据解码设备、视频数据编码设备以及方法 |
US11368677B2 (en) | 2018-06-18 | 2022-06-21 | Interdigital Vc Holdings, Inc. | Boundary filtering for planar and DC modes in intra prediction |
JP7096890B2 (ja) | 2018-06-21 | 2022-07-06 | テレフオンアクチーボラゲット エルエム エリクソン(パブル) | ビデオピクチャ境界のデブロッキング |
US12034977B2 (en) | 2018-06-28 | 2024-07-09 | Electronics And Telecommunications Research Institute | Video encoding/decoding method and device, and recording medium for storing bitstream |
KR20200005480A (ko) | 2018-07-06 | 2020-01-15 | 한국전자통신연구원 | 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체 |
US11094088B2 (en) | 2018-08-31 | 2021-08-17 | Mediatek Inc. | Method and apparatus of in-loop filtering for virtual boundaries in video coding |
WO2020056357A1 (en) | 2018-09-14 | 2020-03-19 | Futurewei Technologies, Inc. | Slicing and tiling for sub-image signaling in video coding |
CN113287316B (zh) | 2018-10-23 | 2023-07-21 | 寰发股份有限公司 | 减少环路滤波缓冲器的方法及装置 |
CN112913247B (zh) | 2018-10-23 | 2023-04-28 | 北京字节跳动网络技术有限公司 | 使用局部照明补偿的视频处理 |
CN109660797A (zh) | 2018-11-09 | 2019-04-19 | 北京达佳互联信息技术有限公司 | 自适应滤波方法、装置、电子设备及计算机可读介质 |
CN109600611B (zh) | 2018-11-09 | 2021-07-13 | 北京达佳互联信息技术有限公司 | 环路滤波方法、环路滤波装置、电子设备和可读介质 |
US11044473B2 (en) | 2018-12-21 | 2021-06-22 | Qualcomm Incorporated | Adaptive loop filtering classification in video coding |
EP3895423A4 (en) | 2018-12-23 | 2022-06-22 | Huawei Technologies Co., Ltd. | ENCODER, DECODER AND RELATED METHODS USING AN ADAPTIVE LOOP FILTER |
JP7516389B2 (ja) | 2019-01-09 | 2024-07-16 | ホアウェイ・テクノロジーズ・カンパニー・リミテッド | ビデオエンコーダ、ビデオデコーダ、および対応する方法 |
WO2020143824A1 (en) | 2019-01-13 | 2020-07-16 | Beijing Bytedance Network Technology Co., Ltd. | Interaction between lut and shared merge list |
BR112021016953A2 (pt) | 2019-02-27 | 2021-11-23 | Huawei Tech Co Ltd | Codificador, decodificador e métodos correspondentes |
CN113545036B (zh) | 2019-03-02 | 2023-11-28 | 北京字节跳动网络技术有限公司 | 对环路内滤波的限制 |
US11910024B2 (en) | 2019-03-11 | 2024-02-20 | Qualcomm Incorporated | Boundary handling for adaptive loop filtering |
WO2020185884A1 (en) | 2019-03-11 | 2020-09-17 | Futurewei Technologies, Inc. | Sub-picture motion vectors in video coding |
CN117499644A (zh) | 2019-03-14 | 2024-02-02 | 北京字节跳动网络技术有限公司 | 环路整形信息的信令和语法 |
CN115767107A (zh) | 2019-03-24 | 2023-03-07 | 北京字节跳动网络技术有限公司 | 视频处理中的非线性自适应环路滤波 |
TWI739386B (zh) | 2019-04-11 | 2021-09-11 | 聯發科技股份有限公司 | 具有適應性參數集之適應性迴路濾波器 |
CN113678462B (zh) | 2019-04-15 | 2023-01-10 | 北京字节跳动网络技术有限公司 | 自适应环路滤波器中的裁剪参数推导 |
KR20210145749A (ko) | 2019-04-16 | 2021-12-02 | 베이징 바이트댄스 네트워크 테크놀로지 컴퍼니, 리미티드 | 비디오 코딩을 위한 적응형 루프 필터링 |
CN113994671B (zh) | 2019-06-14 | 2024-05-10 | 北京字节跳动网络技术有限公司 | 基于颜色格式处理视频单元边界和虚拟边界 |
CN114424539B (zh) | 2019-06-14 | 2024-07-12 | 北京字节跳动网络技术有限公司 | 处理视频单元边界和虚拟边界 |
CN117478878A (zh) | 2019-07-09 | 2024-01-30 | 北京字节跳动网络技术有限公司 | 用于自适应环路滤波的样点确定 |
WO2021004542A1 (en) | 2019-07-11 | 2021-01-14 | Beijing Bytedance Network Technology Co., Ltd. | Sample padding in adaptive loop filtering |
BR112022000214A2 (pt) | 2019-07-11 | 2022-02-22 | Samsung Electronics Co Ltd | Método de decodificação de vídeo em |
CN114731419A (zh) | 2019-09-05 | 2022-07-08 | 寰发股份有限公司 | 视频编解码中于画面和次画面边界的适应性环内滤波方法和装置 |
US11303890B2 (en) | 2019-09-05 | 2022-04-12 | Qualcomm Incorporated | Reusing adaptive loop filter (ALF) sub-picture boundary processing for raster-scan slice boundaries |
-
2020
- 2020-10-10 WO PCT/CN2020/120063 patent/WO2021068906A1/en unknown
- 2020-10-10 CN CN202080071449.0A patent/CN114556939A/zh active Pending
- 2020-10-10 JP JP2022521190A patent/JP7454042B2/ja active Active
- 2020-10-10 CN CN202311518632.2A patent/CN117956146A/zh active Pending
- 2020-10-10 EP EP20875114.9A patent/EP4029263A4/en active Pending
- 2020-10-10 KR KR1020227010655A patent/KR20220071203A/ko not_active Application Discontinuation
-
2022
- 2022-04-08 US US17/716,380 patent/US11706462B2/en active Active
-
2023
- 2023-06-05 US US18/329,415 patent/US20230319316A1/en active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130128986A1 (en) * | 2011-11-23 | 2013-05-23 | Mediatek Inc. | Method and Apparatus of Slice Boundary Padding for Loop Filtering |
US20130343447A1 (en) * | 2012-06-25 | 2013-12-26 | Broadcom Corporation | Adaptive loop filter (ALF) padding in accordance with video coding |
Non-Patent Citations (6)
Title |
---|
HONGBIN LIU, ET AL.: "Non-CE5: Fixes of ALF sample padding", JOINT VIDEO EXPERTS TEAM (JVET) OF ITU-T SG 16 WP 3 AND ISO/IEC JTC 1/SC 29/WG 11, vol. JVET-P0492, JPN6023007499, September 2019 (2019-09-01), pages 1 - 3, ISSN: 0005087880 * |
HONGBIN LIU, ET AL.: "Non-CE5: Padding method for samples at variant boundaries in ALF", JOINT VIDEO EXPERTS TEAM (JVET) OF ITU-T SG 16 WP 3 AND ISO/IEC JTC 1/SC 29/WG 11, vol. JVET-O0625, JPN6023007501, June 2019 (2019-06-01), pages 1 - 4, ISSN: 0005175725 * |
JIANLE CHEN, AND HENDRY: "On padding process of adaptive loop filter", JOINT VIDEO EXPERTS TEAM (JVET) OF ITU-T SG 16 WP 3 AND ISO/IEC JTC 1/SC 29/WG 11, vol. JVET-P0121-v1, JPN6023007503, September 2019 (2019-09-01), pages 1 - 4, ISSN: 0005175727 * |
KIRAN MISRA, FRANK BOSSEN, AND ANDREW SEGALL: "Cross-Component Adaptive Loop Filter for chroma", JOINT VIDEO EXPERTS TEAM (JVET) OF ITU-T SG 16 WP 3 AND ISO/IEC JTC 1/SC 29/WG 11, vol. JVET-O0636_r1, JPN6023007500, July 2019 (2019-07-01), pages 1 - 9, XP030220123, ISSN: 0005087877 * |
MINHUA ZHOU: "AHG16/HLS: A clean-up for the ALF sample padding", JOINT VIDEO EXPERTS TEAM (JVET) OF ITU-T SG 16 WP 3 AND ISO/IEC JTC 1/SC 29/WG 11, vol. JVET-P0053-v1, JPN6023007502, September 2019 (2019-09-01), pages 1 - 3, ISSN: 0005175726 * |
TAMMY LEE, JIANLE CHEN, AND JEONGHOON PARK: "Non-CE6: Simplified reference samples padding for intra prediction", JOINT COLLABORATIVE TEAM ON VIDEO CODING (JCT-VC) OF ITU-T SG16 WP3 AND ISO/IEC JTC1/SC29/WG11, vol. JCTVC-G791, JPN6023042243, November 2011 (2011-11-01), pages 1 - 9, ISSN: 0005175722 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7467617B2 (ja) | 2020-04-26 | 2024-04-15 | テンセント・アメリカ・エルエルシー | 幾何学的クロスコンポーネントフィルタリング |
Also Published As
Publication number | Publication date |
---|---|
CN117956146A (zh) | 2024-04-30 |
US11706462B2 (en) | 2023-07-18 |
EP4029263A1 (en) | 2022-07-20 |
US20230319316A1 (en) | 2023-10-05 |
WO2021068906A1 (en) | 2021-04-15 |
EP4029263A4 (en) | 2022-12-07 |
US20230090209A1 (en) | 2023-03-23 |
CN114556939A (zh) | 2022-05-27 |
KR20220071203A (ko) | 2022-05-31 |
JP7454042B2 (ja) | 2024-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114097225B (zh) | 用于自适应环路滤波的样点确定 | |
AU2020309130B2 (en) | Sample padding in adaptive loop filtering | |
CN114424539B (zh) | 处理视频单元边界和虚拟边界 | |
CN113994671B (zh) | 基于颜色格式处理视频单元边界和虚拟边界 | |
CN114430902B (zh) | 自适应环路滤波中的填充过程 | |
JP7454042B2 (ja) | 適応ループ・フィルタリングにおける利用可能でないサンプル位置でのパディング・プロセス | |
US11683488B2 (en) | Adaptive loop filtering between different video units | |
JP7361196B2 (ja) | 適応ループ・フィルタリングにおける分類 | |
JP2024020420A (ja) | 適応ループフィルタリングのための境界位置 | |
KR102718068B1 (ko) | 적응적 루프 필터링에서의 패딩 프로세스 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20220620 Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20220412 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220412 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20230228 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230524 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20230620 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230915 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20231017 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240112 |
|
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: 20240213 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20240308 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7454042 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |