[Flac-dev] Building a Rice Encoder/Decoder from FLAC

Josh Coalson xflac at yahoo.com
Fri Jul 14 17:49:01 PDT 2006

--- Mary Amon <mary.amon at gmail.com> wrote:
> Hi all,
> I am interested in building a stand alone Rice Encoder/Decoder, using
> source code as a starting point.  I've read the theory behind it, and
> I am
> very interested in info theory.  However,  I am struggling with how
> exactly
> I would implement the theory in code.  I'm a newbie to computer
> science
> (only 1 year experience). I have read the format and documentation
> links on
> the FLAC website, as well as the archives of the mailing list...and I
> haven't found anyone doing something similar.  I am new to doxygen
> and have
> never read or written anything as large as FLAC before.   Right now,
> I am
> looking in the src code of libFLAC, (I am looking through
> stream_encoder.c
> in libFLAC src code), but its really confusing to someone who just
> learned
> what ./configure meant today.
> So any help in where I can find where the Rice encoder/decoder is
> implemented in the code (in libFLAC or libFLAC++) would be super
> helpful.

hi Mary,
the actual lowest level routines that write the value are in
.../src/libFLAC/bitbuffer.c, they are


there is a little terminology vagueness here, but FLAC's "rice"
codes are probably not exactly "rice".  usually rice codes (like
in shorten) start with a sign bit and then have the magnitude
encoded with the unary/binary part.  since this wastes one of the
shortest code words on minus-zero (which never occurs), FLAC first
folds the signed number into unsigned like so:

 0 -> 0
-1 -> 1
 1 -> 2
-2 -> 3
 2 -> 4

etc. and then codes the value without a sign bit.


Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 

More information about the Flac-dev mailing list