/// <summary> /// Renormalizes the working state by outputting the LSB into /// the ANS bitstream. /// </summary> /// <param name="symbol">Current working symbol.</param> /// <param name="output">Output ANS bitstream.</param> /// <param name="state">Working state.</param> public void EncodeRenormalizeState(int symbol, BitStreamIO.Writer output, ref int state) { while (state >= (Config.FrequencyCounts[symbol] << 1)) { output.PutBit((state & 1)); state >>= 1; } }
/// <summary> /// Encodes a list of bytes into metadata and bitstream. /// </summary> /// <param name="input">Input byte list</param> public BitStream EncodeANSBitStream(List <byte> input) { var Input = new SymbolStreamIO.Reader(input); var Output = new BitStreamIO.Writer(); int state = Config.TotalFrequencyCounts; int symbol; while (Input.HasData()) { symbol = Input.GetSymbol(); EncodeRenormalizeState(symbol, Output, ref state); EncodeSymbol(symbol, ref state); } Output.Terminate(input.Count, state); return(Output.BitStream); }