/* Outputs the Golomb/Rice encoding of a non-negative integer */
#define CodeGR(krp, val) rfx_rlgr_code_gr(bs, krp, val)
-static void rfx_rlgr_code_gr(RFX_BITSTREAM* bs, int* krp, uint16 val)
+static void rfx_rlgr_code_gr(RFX_BITSTREAM* bs, int* krp, uint32 val)
{
int kr = *krp >> LSGR;
/* unary part of GR code */
- uint16 vk = (val) >> kr;
+ uint32 vk = (val) >> kr;
OutputBit(vk, 1);
OutputBit(1, 0);
CodeGR(&krp, twoMs);
/* update k, kp */
+ /* NOTE: as of Aug 2011, the algorithm is still wrongly documented
+ and the update direction is reversed */
if (twoMs)
{
- UpdateParam(kp, UQ_GR, k);
+ UpdateParam(kp, -DQ_GR, k);
}
else
{
- UpdateParam(kp, -DQ_GR, k);
+ UpdateParam(kp, UQ_GR, k);
}
}
else /* mode == RLGR3 */