Opened 4 years ago
Closed 4 years ago
#845 closed defect (fixed)
Issue on modeTypeCondition derivation
Reported by: | forayr | Owned by: | |
---|---|---|---|
Priority: | blocker | Milestone: | VVC D10 |
Component: | spec | Version: | VVC D9 vB |
Keywords: | Cc: | ksuehring, bbross, XiangLi, fbossen, jvet@… |
Description
As MttSplitMode[][][] is derived only when split_qt_flag == 0, modeTypeCondition should check its value only when split_qt_flag == 0.
Without this change, there is a mismatch between the spec and the VTM behaviour.
The specification should become:
The variable modeTypeCondition is derived as follows: • If one or more of the following conditions are true, modeTypeCondition is set equal to 0: • slice_type is equal to I and qtbtt_dual_tree_intra_flag is equal to 1. • modeTypeCurr is not equal to MODE_TYPE_ALL. • chroma_format_idc is equal to 0. • chroma_format_idc is equal to 3. • Otherwise, if one of the following conditions is true, modeTypeCondition is set equal to 1: • cbWidth * cbHeight is equal to 64 and split_qt_flag is equal to 1. - • cbWidth * cbHeight is equal to 64 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_TT_HOR or SPLIT_TT_VER. - • cbWidth * cbHeight is equal to 32 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_HOR or SPLIT_BT_VER. + • cbWidth * cbHeight is equal to 64 and split_qt_flag == 0 && MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_TT_HOR or SPLIT_TT_VER. + • cbWidth * cbHeight is equal to 32 and split_qt_flag == 0 && MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_HOR or SPLIT_BT_VER.
Change history (7)
comment:1 Changed 4 years ago by forayr
- Milestone VVC D7 vC deleted
- Version set to VVC D8 vB
comment:2 Changed 4 years ago by bbross
- Milestone set to VVC D10
- Version changed from VVC D8 vB to VVC D9 vB
comment:3 Changed 4 years ago by forayr
- Right, there is an inference on these value, but the modeTypeCondition derived using this infered value might not match the vtm
- I just check and there is an issue in my proposed fix. The described issue is present only for 2 last conditions on the last otherwise. One fix might be:
The variable modeTypeCondition is derived as follows: • If one or more of the following conditions are true, modeTypeCondition is set equal to 0: • slice_type is equal to I and qtbtt_dual_tree_intra_flag is equal to 1. • modeTypeCurr is not equal to MODE_TYPE_ALL. • chroma_format_idc is equal to 0. • chroma_format_idc is equal to 3. • Otherwise, if one of the following conditions is true, modeTypeCondition is set equal to 1: • cbWidth * cbHeight is equal to 64 and split_qt_flag is equal to 1. • cbWidth * cbHeight is equal to 64 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_TT_HOR or SPLIT_TT_VER. • cbWidth * cbHeight is equal to 32 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_HOR or SPLIT_BT_VER. • Otherwise, if one of the following conditions is true, modeTypeCondition is set equal to 1 + (sh_slice_type != I ?1:0): • cbWidth*cbHeight is equal to 64 and MttSplitMode[x0][y0][mttDepth] is equal to SPLIT_BT_HOR orSPLIT_BT_VER and sps_chroma_format_idc is equal to 1. • cbWidth*cbHeight is equal to 128 and MttSplitMode[x0][y0][mttDepth] is equal to SPLIT_TT_HOR orSPLIT_TT_VER and sps_chroma_format_idc is equal to 1. - • cbWidth is equal to 8 and MttSplitMode[x0][y0][mttDepth] is equal to SPLIT_BT_VER. - • cbWidth is equal to 16 and MttSplitMode[x0][y0][mttDepth] is equal to SPLIT_TT_VER. + • cbWidth is equal to 8 and split_qt_flag == 0 and MttSplitMode[x0][y0][mttDepth] is equal to SPLIT_BT_VER. + • cbWidth is equal to 16 and split_qt_flag == 0 and MttSplitMode[x0][y0][mttDepth] is equal to SPLIT_TT_VER. • Otherwise, modeTypeCondition is set equal to 0.
comment:4 Changed 4 years ago by bbross
- Priority changed from minor to blocker
comment:5 Changed 4 years ago by bbross
Agreed solution after offline discussion (thanks to Jianle, Frank and Peter for looking into this):
The variable modeTypeCondition is derived as follows:
– If one or more of the following conditions are true, modeTypeCondition is set equal to 0:
– slice_type is equal to I and qtbtt_dual_tree_intra_flag is equal to 1.
– modeTypeCurr is not equal to MODE_TYPE_ALL.
– chroma_format_idc is equal to 0.
– chroma_format_idc is equal to 3.
– Otherwise, if one of the following conditions is true, modeTypeCondition is set equal to 1:
– cbWidth * cbHeight is equal to 64 and split_qt_flag is equal to 1.
– cbWidth * cbHeight is equal to 64, split_qt_flag is equal to 0, and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_TT_HOR or SPLIT_TT_VER.
– cbWidth * cbHeight is equal to 32 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_HOR or SPLIT_BT_VER.
– Otherwise, if one or more of the following conditions is true, modeTypeCondition is set equal to 1 + ( sh_slice_type != I ? 1 : 0 ):
– cbWidth * cbHeight is equal to 64, split_qt_flag is equal to 0 , and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_HOR or SPLIT_BT_VER and sps_chroma_format_idc is equal to 1.
– cbWidth * cbHeight is equal to 128 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_TT_HOR or SPLIT_TT_VER and sps_chroma_format_idc is equal to 1.
– cbWidth is equal to 8, split_qt_flag is equal to 0 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_VER.
– cbWidth is equal to 16, split_qt_flag is equal to 0 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_TT_VER.
comment:6 Changed 4 years ago by bbross
Additional comment after discussion with Frank and Brian:
Due to the following condition:
– cbWidth * cbHeight is equal to 64 and split_qt_flag is equal to 1.
Adding "split_qt_flag equal to 0" in the the following conditions is redundant since for the values of cbWidth and cbHeight and split_qt_flag equal to 1, the condition above would kick in:
– cbWidth * cbHeight is equal to 64, split_qt_flag is equal to 0 , and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_HOR or SPLIT_BT_VER and sps_chroma_format_idc is equal to 1.
– cbWidth is equal to 8, split_qt_flag is equal to 0 and MttSplitMode[ x0 ][ y0 ][ mttDepth ] is equal to SPLIT_BT_VER.
comment:7 Changed 4 years ago by bbross
- Resolution set to fixed
- Status changed from new to closed
This is fixed in JVET-S2001-v9 with messed up indent that will be fixed in vA.
Thanks for bringing that up.
After checking this, I have the following comments/questions:
1.
Regarding
MttSplitMode[][][] is derived only when split_qt_flag == 0
Actually it is derived based on mtt_split_cu_vertical_flag and mtt_split_cu_binary_flag, both are inferred if not present (e.g. when split_qt_flag == 1).
Hence it is derived but I cannot really see whether the derived values in that case makes sense in the context of deriving modeTypeCondition.
2.
There is a second "Otherwise" part in the derivation of modeTypeCondition that evaluates MttSplitMode[][][]. How is that impacted?
3.
What is the value of modeTypeCondition supposed to be in case of split_qt_flag==1?
Maybe it makes sense to add a condition on split_qt_flag and set modeTypeCondition accordingly?