Opened 5 years ago
Closed 4 years ago
#1012 closed defect (fixed)
Mismatch on the selected neighbouring sample list in CCLM
Reported by: | wangyang.cs | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | spec | Version: | VVC D8 vB |
Keywords: | Cc: | ksuehring, bbross, XiangLi, fbossen, jvet@…, jvet@… |
Description
There is a mismatch on the selected neighbouring sample list in CCLM between the current VVC text and VTM-8.0.
In JVET-Q2001-vE, the left neighbouring samples are put into the selected neighbouring sample list before the above neighbouring samples. However, the above neighbouring samples are first put into the list in VTM-8.0. And the corresponding chroma samples are put to the list according to the selected luma samples. Therefore, a mismatch could happen between text and software when some selected luma samples may have the same value but their corresponding chroma samples may have different values.
Suggest changes in JVET-Q2001-vE as follows:
8.4.5.2.13 Specification of INTRA_LT_CCLM, INTRA_L_CCLM and INTRA_T_CCLM intra prediction mode
The prediction samples predSamples[ x ][ y ] with x = 0..nTbW − 1, y = 0..nTbH − 1 are derived as follows:
...
– The variable y is set equal to pickPosL[ idx ].
– If both SubWidthC and SubHeightC are equal to 1, the following applies:
– Otherwise the following applies:
– If sps_chroma_vertical_collocated_flag is equal to 1, the following applies:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ − SubWidthC ][ SubHeightC * y − 1 ] +
F3[ 0 ][ 1 ] * pY[ −1 − SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ −SubWidthC ][ SubHeightC * y ] + (373)
F3[ 2 ][ 1 ] * pY[ 1 − SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ −SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3] ]
– Otherwise (sps_chroma_vertical_collocated_flag is equal to 0), the following applies:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ −1 − SubWidthC ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ −1 − SubWidthC ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ −SubWidthC ][ SubHeightC * y ] + (374)
F4[ 1 ][ 2 ] * pY[ −SubWidthC ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 − SubWidthC ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 − SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3] ]
54. When numSampT is greater than 0, the selected neighbouring top chroma samples pSelC[ idx ] are set equal to p[ pickPosT[ idx − cntL ] ][ -1 ] with idx = cntL0..cntL + cntT − 1, and the down-sampled neighbouring top luma samples pSelDsY[ idx ] with idx = 0..cntL + cntT − 1 are specified as follows:
– The variable x is set equal to pickPosT[ idx − cntL ].
– If both SubWidthC and SubHeightC are equal to 1, the following applies:
pSelDsY[ idx ] = pY[ x ][ − 1] (375)
– Otherwise, the following applies:
– If sps_chroma_vertical_collocated_flag is equal to 1, the following applies:
– If bCTUboundary is equal to FALSE, the following applies:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ SubWidthC * x ][ − 1 − SubHeightC ] +
F3[ 0 ][ 1 ] * pY[ SubWidthC * x − 1 ][ −SubHeightC ] +
F3[ 1 ][ 1 ] * pY[ SubWidthC * x ][ −SubHeightC] + (376)
F3[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ −SubHeightC] +
F3[ 1 ][ 2 ] * pY[ SubWidthC * x ][ 1 − SubHeightC ] + 4 ) >> 3
– Otherwise (bCTUboundary is equal to TRUE), the following applies:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x − 1 ][ −1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ −1 ] + (377)
F2[ 2 ] * pY[ SubWidthC * x + 1 ][ −1 ] + 2 ) >> 2
– Otherwise (sps_chroma_vertical_collocated_flag is equal to 0), the following applies:
– If bCTUboundary is equal to FALSE, the following applies:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ SubWidthC x − 1 ][ −1 ] +
F4[ 0 ][ 2 ] * pY[ SubWidthC * x − 1 ][ −2 ] +
F4[ 1 ][ 1 ] * pY[ SubWidthC * x ][ −1 ] + (378)
F4[ 1 ][ 2 ] * pY[ SubWidthC * x ][ −2] +
F4[ 2 ][ 1 ] * pY[ SubWidthC * x + 1 ][ −1 ] +
F4[ 2 ][ 2 ] * pY[ SubWidthC * x + 1 ][ −2 ] + 4 ) >> 3
– Otherwise (bCTUboundary is equal to TRUE), the following applies:
pSelDsY[ idx ] = ( F2[ 0 ] * pY[ SubWidthC * x − 1 ][ −1 ] +
F2[ 1 ] * pY[ SubWidthC * x ][ −1 ] + (379)
5. When numSampL is greater than 0, the selected neighbouring left chroma samples pSelC[ idx ] are set equal to p[ −1 ][ pickPosL[ idx - cntT] ] with idx = cntT..cntT + cntL − 1, and the selected down-sampled neighbouring left luma samples pSelDsY[ idx ] with idx = cntT..cntT + cntL − 1 are derived as follows:
– The variable y is set equal to pickPosL[ idx - cntT ].
– If both SubWidthC and SubHeightC are equal to 1, the following applies:
pSelDsY[ idx ] = pY[ − 1][ y ] (372)
– Otherwise the following applies:
– If sps_chroma_vertical_collocated_flag is equal to 1, the following applies:
pSelDsY[ idx ] = ( F3[ 1 ][ 0 ] * pY[ − SubWidthC ][ SubHeightC * y − 1 ] +
F3[ 0 ][ 1 ] * pY[ −1 − SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 1 ] * pY[ −SubWidthC ][ SubHeightC * y ] + (373)
F3[ 2 ][ 1 ] * pY[ 1 − SubWidthC ][ SubHeightC * y ] +
F3[ 1 ][ 2 ] * pY[ −SubWidthC ][ SubHeightC * y + 1 ] + 4 ) >> 3] ]
– Otherwise (sps_chroma_vertical_collocated_flag is equal to 0), the following applies:
pSelDsY[ idx ] = ( F4[ 0 ][ 1 ] * pY[ −1 − SubWidthC ][ SubHeightC * y ] +
F4[ 0 ][ 2 ] * pY[ −1 − SubWidthC ][ SubHeightC * y + 1 ] +
F4[ 1 ][ 1 ] * pY[ −SubWidthC ][ SubHeightC * y ] + (374)
F4[ 1 ][ 2 ] * pY[ −SubWidthC ][ SubHeightC * y + 1] +
F4[ 2 ][ 1 ] * pY[ 1 − SubWidthC ][ SubHeightC * y ] +
F4[ 2 ][ 2 ] * pY[ 1 − SubWidthC][ SubHeightC * y + 1 ] + 4 ) >> 3] ]
Change history (1)
comment:1 Changed 4 years ago by bbross
- Resolution set to fixed
- Status changed from new to closed
Good catch, thanks!
This is fixed in vB of D9, ie. JVET-R2001-v11.