Opened 5 years ago Last modified 5 years ago #1046 new defectPossible 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 76 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 (5)comment:1 Changed 5 years ago by DefaultCC Plugin
comment:2 Changed 5 years ago by peterderivazChanged 5 years ago by o.nakagamicomment:3 Changed 5 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 5 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. 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 731)