Opened 3 years ago
Closed 2 years ago
#79 closed defect (invalid)
Mismatch between spec. and BMS/VTM 2.0 for MPM derivation
Reported by: | merkle | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | BMS | Version: | BMS-2.0.1 |
Keywords: | Cc: | ksuehring, bbross, XiangLi, fbossen, jvet@… |
Description
In section 8.2.2 equations (8-5) and (8-6) differ from the implementation in BMS/VTM 2.0:
Equation (8-5) uses +61 and %64 while VTM 2.0 uses +62 and %65
Equation (8-6) usues %64 while VTM 2.0 uses %65
Change history (4)
comment:1 Changed 3 years ago by bbross
- Component changed from spec to BMS
- Version changed from VVC D2 v4 to BMS-2.0.1
comment:2 Changed 3 years ago by andrew.dorrell
I believe the BMS code is correct by virtue of the following (from PU::getIntraMPMs):
mpm[0] = leftIntraDir;
mpm[1] = ((leftIntraDir + offset) % mod) + 2;
mpm[2] = ((leftIntraDir - 1) % mod) + 2;
This code is intended to generate the MPM list as the angular mode and its immediate neighbours. By my calculations it does this if the BMS values are used (offset=62, mod=65)… and to demonstrate that:
[dorrell@lavi]~/tmp% cat > modtest.cpp
#include <stdio.h>
int main(int argc, char *argv[])
{
int values[] = {65, 66, 2, 3};
for(int i=0; i<4; i++)
{
const int offset = 62;
const int mod = 65;
int n = values[i];
printf("%d, %d, %d\n", n, ((n + offset) % mod) + 2, ((n - 1) % mod) + 2);
}
return(0);
}
[dorrell@lavi]~/tmp% make modtest
g++ modtest.cpp -o modtest
[dorrell@lavi]~/tmp% ./modtest
65, 64, 66
66, 65, 2
2, 66, 3
3, 2, 4
comment:3 Changed 3 years ago by xinzhao
This has been clarified by the editor one month before, and I believe the current BMS-2.1 SW and Spec text are already aligned.
Previous clarification email sent by editor is quoted below:
_
Comment by Shan from email discussion:
In last (July) meeting we decided to adopt HEVC style 3MPM intra mode
coding with 67 total intra modes (65 directional + DC + Planar).
In HEVC (33 directional modes + DC + Planar) we have:
– Otherwise, candModeList[ x ] with x = 0..2 is derived as follows:
candModeList[ 0 ] = candIntraPredModeA
candModeList[ 1 ] = 2 + ( ( candIntraPredModeA + 29 ) % 32 )
candModeList[ 2 ] = 2 + ( ( candIntraPredModeA − 2 + 1 ) % 32 )
For example, if candModeList[ 0 ] = 2, then candModeList[ 1 ] = 33
(opposite direction of 2 minus 1) and candModeList[ 2 ] = 3 (i.e. 2 plus
1)
In the VVC (65 directional modes + DC + Planar) draft text, we have:
– Otherwise, candModeList[ x ] with x = 0..2 is derived as follows:
candModeList[ 0 ] = candIntraPredModeA
candModeList[ 1 ] = 2 + ( ( candIntraPredModeA + 61 ) % 64 )
candModeList[ 2 ] = 2 + ( ( candIntraPredModeA − 1 ) % 64 )
For example, if candModeList[ 0 ] = 2, then candModeList[ 1 ] = 65
(opposite direction of 2 minus 1) and candModeList[ 2 ] = 3 (i.e. 2 plus
1)
This is aligned with HEVC style 3MPM intra mode coding.
If using VTM2.0 approach, i.e. +62 and %65, then if candModeList[ 0 ] = 2,
candModeList[ 1 ] would be equal to 66, which is the opposite direction of
- This is slightly different to HEVC solution. Hence, I think the text is correct.
Best regards,
Shan
comment:4 Changed 2 years ago by ksuehring
- Resolution set to invalid
- Status changed from new to closed
There seems to be consent that there is no open issue. We also got 6MPM in VTM 3 now, so that we don't need any more action here.
Comment by Shan from email discussion:
In last (July) meeting we decided to adopt HEVC style 3MPM intra mode coding with 67 total intra modes (65 directional + DC + Planar).
In HEVC (33 directional modes + DC + Planar) we have:
– Otherwise, candModeList[ x ] with x = 0..2 is derived as follows:
For example, if candModeList[ 0 ] = 2, then candModeList[ 1 ] = 33 (opposite direction of 2 minus 1) and candModeList[ 2 ] = 3 (i.e. 2 plus 1)
In the VVC (65 directional modes + DC + Planar) draft text, we have:
– Otherwise, candModeList[ x ] with x = 0..2 is derived as follows:
For example, if candModeList[ 0 ] = 2, then candModeList[ 1 ] = 65 (opposite direction of 2 minus 1) and candModeList[ 2 ] = 3 (i.e. 2 plus 1)
This is aligned with HEVC style 3MPM intra mode coding.
If using VTM2.0 approach, i.e. +62 and %65, then if candModeList[ 0 ] = 2, candModeList[ 1 ] would be equal to 66, which is the opposite direction of 2. This is slightly different to HEVC solution. Hence, I think the text is correct.
Best regards,
Shan