Skip to content

Fix: Different bitstreams generated, when GPM split reordering is disabled by setting macro off or cfg off

Different bitstreams would be generated in a corner case, when GPM split reordering is disabled by setting macro JVET_Z0054_BLK_REF_PIC_REORDER=0 or its configure parameter --AltGPMSplitModeCode=0. This issue is found only in a Low-Delay B rate point (QP 27) of Class D RaceHorses starting at a 8x32 CU (located at (340,160)) of POC 76.

In the SATD loop of regular GPM mode at encoder, the SATD cost is computed by adding the respected bit costs of GPM syntax elementes together for comparison purpose. Since these costs are all double-floating-point numbers, it is not always guaranteed that two different orders of how these floating-point numbers are added together could always get the same results due to limited precision of floating-point numbers, although the chance is really very low. In ECM-5, two differnt orders of making the same summation are implemented respectively for JVET_Z0054_BLK_REF_PIC_REORDER=0 and --AltGPMSplitModeCode=0, resulting in different encooding results.

The provided fix aligns the order of making summation with that of JVET_Z0054_BLK_REF_PIC_REORDER=0.

Merge request reports