Opened 4 years ago
Closed 4 years ago
#1262 closed defect (fixed)
Editorial: unnecessary variables in 8.5.2.6 and 8.6.2.4
Reported by: | LiZhang | Owned by: | |
---|---|---|---|
Priority: | minor | Milestone: | VVC D10 |
Component: | spec | Version: | VVC D10 vE |
Keywords: | Cc: | vzakharc, yuwenhe, jvet@… |
Description
In those two sub-clauses, variables isPrunedA1 and isPrunedB1 (also isPrunedN) are initialized, updated and checked.
In 8.5.2.6, they are used to avoid comparing the second HMVP candidate with A1/B1 which has been checked to be same with the first HMVP candidate.
However, the results won't be changed by removing all these variables since HMVP candidates in the HmvpCandList are always unique.
In 8.6.2.4, only one HMVP candidate needs to be compared to A1/B1. There is no need to set and update those variables.
Attachments (1)
Change history (9)
comment:1 Changed 4 years ago by LiZhang
- Component changed from 360Lib to spec
- Milestone set to VVC D10
- Version set to VVC D10 vE
comment:2 follow-up: ↓ 3 Changed 4 years ago by jlchen
Changed 4 years ago by LiZhang
comment:3 in reply to: ↑ 2 Changed 4 years ago by LiZhang
isPrunedN is used in the two subclauses. We could remove all of them, as suggested in the attachment.
Replying to jlchen:
I see the variables isPrunedA1 and isPrunedB1 are initialized In 8.5.2.6 and 8.6.2.4, but never used in late decoding process in vF release.
Shall just remove the sentence "The variables isPrunedA1 and isPrunedB1 are set both equal to FALSE." in both sections?
comment:4 follow-up: ↓ 5 Changed 4 years ago by fbossen
As far as I know, these variable are needed. There are basically there to make sure that some operations are not applied multiple times.
comment:5 in reply to: ↑ 4 Changed 4 years ago by LiZhang
The current text is not aligned with the reference software where these flags are not existing.
Here are the source code from VTM9.3:
bool PU::addMergeHMVPCand()
{
....
for (int mrgIdx = 1; mrgIdx <= num_avai_candInLUT; mrgIdx++)
{
miNeighbor = lut[num_avai_candInLUT - mrgIdx];
((mrgIdx > 1 | !isGt4x4) && ibcFlag) | ((!isAvailableA1 | (miLeft != miNeighbor)) && (!isAvailableB1 | (miAbove != miNeighbor))) ) |
...
}
}
To me, it is better not to ask people to follow the specific way defined in the current spec.
Replying to fbossen:
As far as I know, these variable are needed. There are basically there to make sure that some operations are not applied multiple times.
comment:6 Changed 4 years ago by fbossen
Ok. I looked some more into this.
There was a software change where the isPruned variables were removed:
https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM/-/merge_requests/1108
This was claimed to not involve normative changes.
In 8.6.2.4, isPrunedN can indeed be removed because if "isPrunedN is equal to FALSE" fails then "hMvpIdx is equal to 1" fails too.
In 8.5.2.6, it should also be possible to remove isPrunedN since no two entries in the HMVP list should be identical (which appears to be the case), i.e., if "The candidate HmvpCandList[ NumHmvpCand − hMvpIdx] and the merging candidate N have the same motion vectors and the same reference indices" is true for hMvpIdx = 1, it cannot also be true for hMvpIdx = 2.
comment:7 Changed 4 years ago by jlchen
Thanks for discussion and clarifying situation. Li's changes are good to me and can be taken to make the text clearer.
comment:8 Changed 4 years ago by jlchen
- Resolution set to fixed
- Status changed from new to closed
Fixed in JVET-S2001-vG release as Li suggested.
I see the variables isPrunedA1 and isPrunedB1 are initialized In 8.5.2.6 and 8.6.2.4, but never used in late decoding process in vF release.
Shall just remove the sentence "The variables isPrunedA1 and isPrunedB1 are set both equal to FALSE." in both sections?