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; }