#100 closed defect (fixed)Bug with the selection of MVs for L1 references when AMVP is used
Description
In the function predInterSearch() for some cases motion estimation is bypassed (if (iRefList && iRefIdxTemp != iRefIdx[0])). Value of uiBits[iRefList] then does not include the rate of the MV, while uiCostTemp is set to MAX_UINT. The search for the best MVP is called in this case as well (function xCheckBestMVP()) and it can happen that it returns a negative value in uiBitsTemp and this causes integer overflow in uiCostTemp, which wraps around to small values. This leads to cases where this value (that should be MAX_UINT) is smaller than uiCost[0] and a L1 MV wrongly appears to be of a lower cost than L0 MV.
This wrap-around small value is in the range of 0xFFFF, so it creates problems in very few cases - only a minor effect on performance, but needs to be tested with a fix. Fix could be simple - just bypass the function xCheckBestMVP() or check whether ME was bypassed when calculating cost. Change History (6)comment:1 Changed 14 years ago by nsprljancomment:2 Changed 14 years ago by nsprljan
comment:3 Changed 14 years ago by nsprljan
Obsolete comment:4 Changed 13 years ago by davidf
Updating component after adding WD (Text) tickets comment:5 Changed 13 years ago by davidf
comment:6 Changed 13 years ago by davidf
Note: See
TracTickets for help on using
tickets. | This list contains all users that will be notified about changes made to this ticket. These roles will be notified: Reporter, Owner, Subscriber, Participant
|
Note that this bug occurs only for GPB coding (low delay coding, with generalised B instead of P), when both L0 and L1 lists are used. My understanding is that this will be changed and a single list will be used when L0==L1, so this bug will go away with that change. As a side note - a great part of the reported 0.9dB gain for this change is probably due to AMVP using more MVs - previously the MVs of partitions referencing the other list could not be used.