Example #1
0
int Golomb::encode(uint m, int value, BitStream& bs){
	int q, r, i;
	int nbits = (int) floor(log2(m)) + 1;
	int err;

	if (value < 0 )
	{
		value = 2*abs(value) - 1;
	}
	else
	{
		value *= 2;
	}

	q = value/m;
	r = value%m;


	for(i=0; i<q;i++)
	{
		if ((err = bs.writeBit(1))!= 0)
			return err;
	}


	if ((err = bs.writeBit(0))!= 0)
		return err;

	if ((err = bs.writeBits(r, nbits))!= 0){
		return err;
	}

	return 0;
}