Opened 14 years ago Closed 14 years ago #142 closed defect (fixed)bug of dQP coding in LCEC
Description
Currently, dQP is encoded first by a flag indicating zero or nonzero dQP. If the flag shows nonzero dQP then the value of dQP is encoded by mapping a signed dQP to an unsigned codenumber. Then these codenumbers are encoded by unary code. For LCEC, xWriteSvlc( iDQp ) from Void TEncCavlc::codeDeltaQP( TComDataCU* pcCU, UInt uiAbsPartIdx ) is using the mapping
The LCEC mapping is: 1->1, -1->2,2->3, -2->4....
UInt uiDQp = (UInt)( iDQp > 0 ? ( 2 * iDQp - 2 ) : ( -2 * iDQp - 1 ) );
The CABAC mapping is: 1->0, -1->1,2->2, -2->3....
The problem is that LCEC mapping wastes the codenumber==0 and spends more bits to encode nonzero dQPs. Solution is to use the CABAC mapping for LCEC case to save bits. Change History (5)comment:1 Changed 14 years ago by haocomment:2 Changed 14 years ago by davidf
This has been resolved by r846 comment:3 Changed 13 years ago by davidf
Updating component after adding WD (Text) tickets comment:4 Changed 13 years ago by davidf
comment:5 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
|
I think the solution is to just remove a flag before SVLC code rather than to change the mapping, according to the universal way of LCEC to code signed integer.