Opened 12 years ago Closed 7 years ago #1046 closed defect (fixed)Possible errors in semantics for scaling_list data
DescriptionRange for loop variable
In 7.4.5 "Scaling list data semantics" the definition of "scaling_list_pred_matrix_id_delta" involves setting values for i in the range 0..Min(64,...), but the Table 7-6 is only defined for values up to 63.
I believe the Min(64, should be changed to Min(63,
Note that this appears twice in the definition of "scaling_list_pred_matrix_id_delta". Default for DC value
When scaling_list_pred_mode_flag==0, the values for ScalingList are derived based on previous values of ScalingList.
I believe there should be a similar derivation for the values of scaling_list_dc_coef_minus8 based on previous values.
At the moment, ScalingFactor[3][matrixId][0][0] is based on scaling_list_dc_coef_minus8[1][matrixId] which will take its default value of 8 if scaling_list_pred_matrix_flag[3][matrixId]==0.
The reference code appears to have code to deal with this case in TDecCavlc::parseScalingList if( sizeId > SCALING_LIST_8x8 ) { scalingList->setScalingListDC(sizeId,listId,((listId == scalingList->getRefMatrixId (sizeId,listId))? 16 :scalingList->getScalingListDC(sizeId, scalingList->getRefMatrixId (sizeId,listId)))); } Attachments (1)Change History (6)comment:1 Changed 12 years ago by DefaultCC Plugin
comment:2 Changed 12 years ago by peterderivazChanged 12 years ago by o.nakagamicomment:3 Changed 12 years ago by o.nakagami
Thank you for the comment. I think you're right.
Attached is a suggested fix. Please check it. comment:4 Changed 12 years ago by peterderivaz
Thanks Nakagami, the content of your change looks correct to me.
Stylistically, it feels slightly odd to be setting the syntax element scaling_list_dc_coef_minus8 to a value in the semantics for a different element. comment:5 Changed 7 years ago by bbross
Fixed in the 2016/12 release of the HEVC specification. 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
|
Thinking about the range for the loop variable, there is also a problem with the second part of the Min.
It currently reads i = 0..Min( 64, ( 1 << ( 4 + ( sizeId << 1 ) ) ) ).
I think this should become i = 0..(Min( 64, ( 1 << ( 4 + ( sizeId << 1 ) ) ) )-1).
(and the same change in equation 7-31)