Opened 5 years ago
Closed 4 years ago
#976 closed defect (fixed)
A bug about IBC virtual buffer
Reported by: | jzxu | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | spec | Version: | VVC D8 vB |
Keywords: | Cc: | ksuehring, bbross, XiangLi, fbossen, jvet@… |
Description
The bug has been identified during generation of conformance bitstreams regarding IbcBuf. In the current text, the buffer size is 256x128 and the text mentions:
When x0 % VSize is equal to 0 and y0 % VSize is equal to 0, the following assignments are made for x = x0..x0 + VSize − 1 and y = y0..y0 + VSize − 1:
IbcVirBuf[ 0 ][ ( x + ( IbcBufWidthY >> 1 ) ) % IbcBufWidthY ][ y % CtbSizeY ] = −1 (179)
For 128x128 CTU, the VSize is equal to 64 and IbcBufWidthY is 256. Before decoding a 128x128/128x64/64x128 CU, only the top-left VPDU in the CU is reset as invalid and the other part may still be valid in the buffer. The bug may make the decoder need to maintain more than 3 additional VPDUs in order to support IBC. A simple fix is to change the text as follows (the change relative to the current text is marked in bold).
When x0 % VSize is equal to 0 and y0 % VSize is equal to 0, the following assignments are made for x = x0..x0 + Max( cbWidth, VSize ) − 1 and y = y0..y0 + Max( cbHeight, VSize ) − 1:
IbcVirBuf[ 0 ][ ( x + ( IbcBufWidthY >> 1 ) ) % IbcBufWidthY ][ y % CtbSizeY ] = −1 (179)
In the previous design of IBC virtual buffer with the size being 128x128, there is no such an issue. The purpose to reset all samples in a VPDU to −1 is to keep IBC from referring the collocated (relative to the IBC buffer) VPDU. After decoding a CU larger than 64x64 (that cannot be of IBC mode), its reconstruction will replace −1 and fill up the VPDU memory. Thus, resetting only the top-left VPDU is fine in such a case. It was decided that resetting all VPDUs at the beginning of decoding a VPDU was not necessary, to keep conciseness of the text.
Change history (3)
comment:1 Changed 5 years ago by jzxu
comment:2 Changed 5 years ago by axink
From Xiaozhong Xu:
I can confirm that the change in this ticket is necessary to handle the case where the current CU size is a multiple of VSize. If the CU size is larger than a VSize, the corresponding area of the same size in the virtual buffer needs to be cleared (set equal to -1) to accommodate the storage of of rec. samples from the current CU after decoding. Those exiting samples in the virtual buffer cannot be used as references anymore.
Without this change, the current spec seems to require a larger size of memory than expected.
comment:3 Changed 4 years ago by bbross
- Resolution set to fixed
- Status changed from new to closed
Good catch, thanks!
This will be fixed in first verison of D10.
A fix is https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/merge_requests/1484.